拉取Pull
你可能会说
同事说他改完了,我怎么把他那版拿到我电脑上?
拉取是把网上已经保存的新版本同步到当前项目的操作。例如同事把改动上传到 GitHub 后,可以拉取到自己电脑上的同一个项目。开始前先保存或收好未完成改动;第一次把整个项目下载到电脑,应使用克隆。
什么时候用
- 开始协作前先取得网上的最新版本,减少之后的冲突$ git status --short(没有输出,工作区干净)$ git pullFast-forward
- Pull 前先查看当前状态,保存或收好未完成改动设备 A 💻 push→☁️→设备 B 💻 pull
- 第一次取得仓库用克隆 Clone,之后同步新增版本再用 Pullclone首次:复制工作文件与仓库历史pull后续:获取并整合远程更新
- 完成后运行项目,确认新版本在本机仍然正常$ git pullAuto-merging index.htmlCONFLICT (content): Merge conflict in index.html拉取后也可能发生冲突,需要手动解决
什么时候不用
- 手头有混乱的半成品时直接 Pull,把两批改动搅在一起队友已推 12 个新提交本地仍是旧版本长期不同步远端,会扩大分支差异并增加合并冲突
- 遇到冲突就随意选择一边,而不理解双方修改Automatic merge failed;fix conflicts and then commit the result.(main|MERGING) $ 冲突尚未处理
- 每次想更新都重新 Clone,制造多个重复项目文件夹pull 后有 3 个文件变化未检查改动继续修改可能覆盖协作者已经完成的工作
- 把 Pull 当成恢复工具;它不能找回从未 Commit 的本地改动$ git pullAlready up to date.未保存到 Git 历史的改动不会被取回
组成结构 · Anatomy
☁️ 远程仓库GitHub 上的新提交
git fetch →
🗄 本地仓库先下载,不动你的文件
git merge →
💻 工作区新代码合进来
远程分支保存协作者已推送的提交
将新提交下载到本地仓库,不修改工作目录文件
获取的提交先保存于本地仓库,等待合并或变基
将获取的提交整合到当前分支,此时可能发生冲突
合并完成后,工作目录更新为当前分支的文件版本
常见变体 · 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 后,可获得相同的提交历史
延伸阅读 · 权威出处