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

Git如何将本地远程缺失的临时提交更新至远程分支?

Git推送本地新提交到远程的底层逻辑拆解

嘿,这个问题问到点子上了!我来一步步给你讲清楚Git是怎么把本地那些远程缺失的提交同步过去的~

先明确推送前后的状态

推送前:

  • 本地featureA提交链:A->B->C->D->E->F->G->T(多了来自master的D、E,以及合并提交T)
  • 远程origin/featureA提交链:A->B->C->F->G

这就是git status提示“ahead by 3 commits”的原因——本地比远程多了D、E、T三个提交对象。

Git推送的核心步骤

1. 对比提交历史,找出缺失的提交

Git首先会对比本地featureA和它的远程追踪分支origin/featureA的提交哈希,精准找出本地有但远程没有的所有提交:也就是D、E、T这三个。这里要注意,哪怕D、E是来自master分支的提交,只要远程featureA的历史里没有它们的哈希,就会被归为“缺失提交”。

2. 打包并传输缺失的Git对象

Git里的每个提交都对应一套对象:包括记录提交信息的提交对象、记录目录结构的树对象、记录文件内容的Blob对象。Git会把这些缺失提交对应的所有对象打包成一个高效的压缩包,然后通过网络传输到远程仓库。

这个过程不会重复传输远程已经有的对象(比如A、B、C、F、G这些),只会传缺失的部分,非常高效。

3. 请求远程更新分支指针

当所有缺失对象都传输完成后,Git会向远程仓库发送一个请求:“请把你的featureA分支指针移动到提交T的位置”。

因为远程featureA的当前头G是本地提交T的父提交之一(合并提交T有两个父:G和E),所以远程仓库可以直接安全地把分支指针从G移动到T——这个操作没有冲突,是Git允许的常规更新(除非远程仓库设置了分支保护规则,比如禁止直接推送合并提交)。

4. 同步本地追踪分支

推送成功后,本地的origin/featureA追踪分支会自动更新,指向和远程一样的提交T。这时候你再运行git status,就不会再看到“ahead by X commits”的提示了。

补充几个关键点

  • 你用的git push origin featureA命令,本质就是在告诉Git:“把我的本地featureA分支的状态同步到远程的featureA分支,把需要的提交都传过去”。
  • Git判断提交是否存在的唯一依据是提交哈希值,不管这个提交来自哪个分支,只要远程没有这个哈希,就会被推送。
  • 合并提交T的作用是完整记录这次合并操作的上下文,它保存了两个父提交的信息,让后续查看历史时能清晰看到featureA分支是怎么合并master的变更的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:42:46