You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git pull会执行哪些HEAD操作?合并时ORIG_HEAD等是否变更?

git pull的HEAD相关操作及ORIG_HEAD/MERGE_HEAD疑问解答

一、git pull涉及的HEAD相关操作

git pull本质是git fetch + 后续的合并/变基操作,具体HEAD的变化分两种场景:

1. 默认场景:git fetch + git merge

  • git fetch阶段:会将远程分支的最新提交拉取到本地,更新对应远程追踪分支(比如origin/main),同时把拉取到的最新commit记录到FETCH_HEAD文件中(就像你执行git fetch origin main看到的输出那样)。
  • git merge阶段:根据当前分支和远程分支的提交关系,有两种情况:
    • 快进合并(Fast-forward):如果当前分支的所有提交都已经包含在远程分支里,Git会直接将HEAD移动到远程分支的最新commit,不会生成新的合并提交。这种情况下,HEAD只是单纯移动位置,没有其他特殊引用变更。
    • 非快进合并(True merge):如果两边有各自独立的提交,Git会创建一个新的合并提交,此时:
      • HEAD会指向这个新生成的合并提交;
      • ORIG_HEAD会被设置为合并前当前分支的HEAD指向的commit;
      • MERGE_HEAD会被设置为被合并的远程分支commit(也就是FETCH_HEAD指向的内容)。

2. 配置pull.rebase=true时:git fetch + git rebase

如果你的Git配置了pull.rebase=true,那么pull会执行git fetch + git rebase:

  • 先完成fetch拉取远程最新提交;
  • 然后将当前分支的所有提交重新应用到远程分支的最新提交之上;
  • 最终HEAD会指向重新应用后的最新commit,这个过程不会生成合并提交,也不会更新ORIG_HEAD或MERGE_HEAD。

二、为什么git pull main没提到ORIG_HEAD/MERGE_HEAD

你执行git pull main时输出没提及这两个引用,大概率是因为发生了快进合并:

  • 快进合并不需要创建新的合并提交,只是单纯移动HEAD到远程分支的最新位置,所以Git不会更新ORIG_HEAD和MERGE_HEAD;
  • 只有当合并是需要创建新commit的非快进合并时,这两个引用才会被生成/更新,此时你才会在输出中看到相关提示(比如“Merge made by the 'ort' strategy.”之类的合并信息)。

你可以通过以下命令验证当前是否是快进合并的情况:

git log --oneline --graph

如果看不到合并节点,说明是快进合并;如果有合并节点,则是非快进合并,此时ORIG_HEAD和MERGE_HEAD应该已经被设置。

内容的提问来源于stack exchange,提问作者mfaani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 12:15:06