Workflows
fetch 与 pull 的区别
解释为什么先 fetch 再决定 merge 或 rebase,往往比直接 pull 更可控。
先记住结论
git fetch:下载远端最新信息,但不直接改你的当前分支git pull:先 fetch,再把远端变化整合进当前分支
这也是为什么很多团队更推荐:
git fetch origin
# 看清楚变化后,再决定 merge 或 rebase
为什么 fetch 更适合作为默认习惯
因为它把“同步远端状态”和“修改当前分支”拆成了两个动作。
这意味着你可以先观察:
- 远端是否比本地更新
- 当前分支是否已经分叉
- 接下来更适合 merge、rebase,还是只做 fast-forward
pull 的四种常见整合结果
根据官方文档,pull 在下载完成后,整合阶段可能表现为:
- fast-forward
- rebase
- merge
- squash merge
所以,pull 不应该被简单理解成“安全同步一下”。
推荐的教学用法
对个人分支
git fetch origin
git rebase origin/main
对稳定主分支
git pull --ff-only
--ff-only 的好处是:如果本地和远端已经分叉,它会直接失败,而不是替你做一个你没意识到的整合动作。
常见误区
误区 1:pull 比 fetch 更省事,所以更适合初学者
恰恰相反。初学者更需要观察空间,而不是在一个命令里同时发生“下载 + 整合”。
误区 2:只要 pull 成功,就说明历史一定干净
不一定。它可能已经帮你做了 merge 或 rebase,只是你没有立刻意识到。
团队建议
如果你正在设计团队 Git 规范,可以把下面这条写进约定:
- 开发分支同步前优先
fetch - 共享分支默认
pull --ff-only - 是否启用
pull.rebase需要团队统一说明