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

如何将本地分支中选定的旧提交C-E压缩为单个提交C'

操作方案:交互式变基(推荐,步骤简洁直接)

假设你的本地提交链从旧到新为:公共历史 → E → ... → C → B → A(当前HEAD,本地dev分支),目标是将E到C的所有提交压缩为单个提交C',最终得到**公共历史 → C' → B → A(HEAD)**的提交结构,且不改动远程origin分支。

  1. 确保当前处于本地dev分支:
    git checkout dev
    
  2. 执行交互式变基,指定变基起点为C的父提交(即E的直接父,也就是公共历史的最后一个提交)。
    • 若你不知道该提交的哈希,可通过相对位置指定:假设从A往回数,E是第N个提交(比如A是HEAD,B是HEAD1,C是HEAD2,E是HEAD~4,那N=4),则命令为:
      git rebase -i HEAD~N
      
    • 若你能找到公共历史最后一个提交的哈希(比如abc123),直接用:
      git rebase -i abc123
      
  3. 在弹出的编辑器中,会列出从E到A的所有提交,格式类似:
    pick e12345 提交E的信息
    pick f67890 提交X的信息(E和C之间的提交)
    pick g01234 提交C的信息
    pick h56789 提交B的信息
    pick i01234 提交A的信息
    
  4. 修改提交指令:保留E的pick,将E之后到C的所有提交的pick改为squash(或fixup,后者会丢弃被压缩提交的信息,仅保留E的提交信息),B和A的pick保持不变:
    pick e12345 提交E的信息
    squash f67890 提交X的信息
    squash g01234 提交C的信息
    pick h56789 提交B的信息
    pick i01234 提交A的信息
    
  5. 保存并退出编辑器,Git会自动将E到C的提交压缩为一个新提交。随后会弹出新的编辑器,让你修改合并后的提交信息,将其改为C'的描述,保存退出即可。

完成后,本地dev分支的提交链就变为目标结构,HEAD仍指向A,全程不会改动远程origin分支。

额外提示

  • 若操作中出错,可随时执行git rebase --abort撤回变基,回到操作前的状态。
  • 该操作仅修改本地未推送的提交,不会影响远程仓库,无需担心对他人工作造成干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 15:31:41