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

如何在branch1被Rebase后,将branch2重新Rebase到branch1上?

如何将branch2重新Rebase到Rebase后的branch1上

场景回顾

初始分支结构:

master:  A - B - C - D
                  \
branch1:           E - F
                        \
branch2:                 G - H

将branch1 Rebase到master后,branch1的提交哈希被重写,branch2与branch1失去关联,结构变为:

master:   A - B - C - D
                       \
branch1:                E' - F'  # 注:E'、F'是Rebase后生成的新提交,哈希与原E、F不同

branch2:                 G - H    # 仍基于原branch1的旧提交F

解决方法

可以通过git rebase的--onto参数,将branch2上的提交(G、H)重新移植到新的branch1上,步骤如下:

  1. 切换到branch2

    git checkout branch2
    
  2. 定位branch2原本依赖的旧branch1提交
    你需要找到原branch1中被Rebase覆盖的最后一个提交(也就是旧的F),可以通过以下方式获取:

    • 查看branch1的reflog记录,找到Rebase前的branch1位置:
      git reflog branch1
      
      输出里会有类似abc123 branch1@{0}: rebase finished: ...的记录,上一条就是Rebase前的branch1位置(对应旧F的哈希),比如def456 branch1@{1}: commit: F,这里的def456就是旧F的哈希。
    • 或者直接通过branch2的提交反向推导:因为G是基于旧F的提交,所以旧F是branch2的第2个父提交,用以下命令获取:
      git rev-parse branch2~2
      
  3. 执行带--onto的Rebase命令
    把branch2中从旧F之后的提交(G、H)移植到新的branch1上:

    git rebase --onto branch1 <旧F的哈希> branch2
    

    替换<旧F的哈希>为你找到的实际哈希值即可。

简化操作(如果能确认reflog记录)

如果刚完成branch1的Rebase,还能通过reflog的相对引用直接指定旧branch1的位置,无需手动找哈希:

git rebase --onto branch1 branch1@{1} branch2

branch1@{1}代表branch1上一次的状态,也就是Rebase前指向旧F的位置。

注意事项

  • 操作要尽量及时,如果旧提交被Git的垃圾回收机制清理掉,就无法再找回了。
  • Rebase过程中如果出现冲突,需要逐个提交解决冲突,解决后用git add标记冲突文件,再执行git rebase --continue继续,直到完成。

内容的提问来源于stack exchange,提问作者C.Tale

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 22:17:05