📖 知识点
1. 多人协作标准流程(每天开工循环)
开工: git pull → 同步远程最新代码
开发: 改代码 → git add → git commit(本地提交)
收工: git pull → 再同步(防止远程有新提交)
发布: git push → 推送本地提交到远程
核心原则:先 pull 同步,再开发,提交前再 pull,最后 push。这样远程和本地始终保持同步,减少冲突。
💡 生活比喻多人协作像 "排队交作业":交之前先看看档案室有没有人抢先更新了(pull),没有就直接交(push);有就先把自己的跟人家的合并好再交。
2. git fetch vs git pull(核心区别)
| 命令 | 做了什么 | 生活比喻 |
|---|---|---|
| 只把远程更新下载到本地,不合并 | 到档案室 "看一眼" 有什么新文件,先不拿 |
| 下载并自动合并到当前分支 | 直接拿走新文件并更新到手 |
git fetch # 只看远程有没有新提交,不改变工作区
git pull # 下载并合并,工作区直接更新
3. 为什么有 fetch?
git fetch 让你先看再决定:先下载更新,用 git log 或 git diff 看清差异,确认无误后再手动 git merge,更可控。pull 是 "fetch + merge" 的快捷方式。
git fetch
git merge origin/master # 手动合并(fetch后再决定合不合)
⚠️ 易错提醒
git fetch只下载不合并;git pull下载并自动合并日常图省事用
git pull;想先看清差异再合并,用git fetch+git merge多人协作记住流程:先 pull、再开发、提交前 pull、最后 push
⚔️ 剧情 Kata 实战任务
任务需求:
模拟远程有新提交(在模拟远程 / 备份里提交)
在主仓库先
git fetch,观察:下载但不合并用
git status/git log确认 fetch 没改工作区再用
git merge手动合并,或直接git pull体会 fetch(只看)和 pull(取 + 合)的区别
参考代码(在终端依次敲)
# 0. 模拟队友在远程提交
cd ~/外卖App备份
echo "def 会员日(): return '双倍积分'" >> 外卖App.py
git add 外卖App.py
git commit -m "feat: 新增会员日活动"
# 1. 主仓库:先只 fetch(下载但不合并)
cd ~/外卖App
git fetch ~/外卖App备份 master
# 2. 观察:fetch 后工作区没变
git status # 仍是原来的,没自动合并
git log --oneline # 本地历史没有新提交
# 3. 再手动合并(把fetch下来的合进来)
git merge FETCH_HEAD
# 4. 验证已同步
git log --oneline
运行示例:
user@linux:~/外卖App$ git fetch ~/外卖App备份 master
From /home/user/外卖App备份
* branch master -> FETCH_HEAD
user@linux:~/外卖App$ git status
On branch master
nothing to commit, working tree clean # fetch后没自动合并,工作区干净
user@linux:~/外卖App$ git merge FETCH_HEAD
Updating 9d0e1f2..e2f3a4b
Fast-forward
外卖App.py | 1 +
1 file changed, 1 insertion(+)
user@linux:~/外卖App$ git log --oneline
e2f3a4b feat: 新增会员日活动
9d0e1f2 feat: 新增优惠满减
...
💡 完成动作示意:
git fetch→ 下载了远程新提交,但git status显示工作区没变(没合并)
git merge FETCH_HEAD→ 手动把下载的内容合并进来
git log看到新提交 ——fetch 先看、merge 再合,这就是和 pull 的区别!
🧠 思考题
git fetch和git pull的核心区别是什么?pull 相当于 "哪两个命令的组合"?(提示:fetch + merge)多人协作 "开工前先 pull、提交前再 pull、最后 push" 这个流程,为什么能减少冲突?