拉取Pull
Git 专区把网上代码仓库的最新版本下载并合并到电脑
pull 会先获取远程提交,再按仓库配置合并或变基到本地分支。执行前先确认工作区状态清楚;未完成改动可以先 commit 或贮藏 Stash,减少冲突和混淆。
远程仓库队友推的新存档
fetch→
本地仓库
merge→
工作区index.html 变最新
$ git status && git pull
pull 一口气做两件事:先 fetch 把新存档下载到本地仓库,再 merge 合进你正在改的文件。开工前先 pull,冲突少一半;工作区有半成品时先 commit 再拉。
什么时候用
- 协作时开工先 pull 再干活:和远程对齐,冲突能少一大半$ git status --short(没有输出,工作区干净)$ git pullFast-forward
- 换电脑接力:走前 推送 Push、到新电脑 pull,两台无缝衔接公司💻 push→☁️→家里💻 pull
- 第一次取得仓库用克隆 Clone,之后同步更新再用 pullclone第一次:整仓连历史下载pull之后每次:只取增量更新
- 拉下来出冲突照样手解:选版本、删标记、重新 提交 Commit$ git pullAuto-merging index.htmlCONFLICT (content): Merge conflict in index.html拉下来也可能冲突,照样手解
什么时候不用
- 闷头改一周从不 pull:队友推了一堆,合并时冲突成山队友已推 12 个新存档你还停在上周闷头改一周不 pull,合并时冲突成山
- pull 出冲突关掉当没看见:仓库卡在合并中状态,越拖越乱Automatic merge failed;fix conflicts and then commit the result.(main|MERGING) $ 关掉当没看见…
- 拉下来的改动看都不看接着写:容易把队友的成果又改回去pull 下来 3 个文件变了看都不看接着写,把队友的成果又改回去
- pull 不能恢复从未提交过的本地改动$ git pullAlready up to date.刚才没存档的改动还是回不来
组成结构 · Anatomy
☁️ 远程仓库GitHub 上的新存档
git fetch →
🗄 本地仓库先下载,不动你的文件
git merge →
💻 工作区新代码合进来
1远程仓库RemoteGitHub 上的最新状态,队友推上去的存档都在这
2取回Fetch把新存档下载到本地仓库,这一步不动你正在改的文件
3本地仓库Local Repo新存档先躺在这,和下载视频先存缓存一个道理
4合并Merge把取回的存档合进当前分支,这一步才可能出冲突
5工作区Working Dir合完之后,你正在编辑的文件就是最新版了
常见变体 · Variants
拉取更新git pull
git status && git pull
先确认工作区,再和远程对齐
只看不合git fetch
git fetch
只看看远程有啥动静,先不合
拉了最新up to date
Already up to date.
看到这句说明本地已是最新
典型使用场景
终端 git pull 取更新
$ git pull
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
Updating a3f9c21..e7b2d48
Fast-forward
index.html | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
pull 下来遇到冲突
$ git pull
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
打开冲突文件手选版本,再 add + commit 收尾
clone 与 pull 的区别
git clone
第一次:整个仓库连全部历史下载到本地
📦 36 个对象 · 全部存档
git pull
之后每次:只取你没有的那几个新存档
📄 1 个文件 · 增量更新
公司 push、家里 pull
🏢💻
下班前
git push
git push
☁️
GitHub
云端仓库
云端仓库
🏠💻
到家坐下
git pull
git pull
两台电脑分别完成 push / pull 后,才会同步到同一进度