如何撤消已被拉/合并的git rebase?

时间:2013-01-05 18:14:58

标签: git git-merge git-rebase

我处在一个奇怪的困境中 - 我们有一个开发人员多次在分支上执行“git pull --rebase”,我正在尝试修复损坏。我们的图表最初看起来像这样:

[master]
A--B (origin/master)
___\________________________
[branch]
     \
      C--D--E (origin/branch)

错误合并后,我们的图表现在看起来像这样:

[master]
A--B---------------H--I (origin/master)
    \             /
     C--D--E--F--G
____________\_______________ 
[branch]     \
              J--K--L (origin/branch)

提交F和G真正属于主人,而C,D和E属于分支。

恢复图表的最佳选择是什么?提交我已被拉到其他分支机构和本地存储库。是我唯一可以还原个别提交的选项吗?上面的图表被简化了 - 有超过40个提交被错误地合并。

我尝试过几件事情,包括将F和G重新贴在B上,但这创造了H'和我',我不知道如何处理已被拉/合并的旧H和我。< / p>

更新

如果我只是想让git还原master上的特定提交,并且将它们打包到分支上,那么如何将“prepend”提交到分支上呢?在这种情况下,我如何选择C和D成为J的父母?

1 个答案:

答案 0 :(得分:1)

+1对CharlesB的建议。 Rebase F和G重新映射到B似乎可以解决问题。您可能还需要将H和I重新绑定到最后。你可能需要推-f(强制)来使它成为原点,但是一旦原点看起来应该像用户那样,他们的存储库也应该自己纠正。

在Git中,原始节点将始终存在(直到git gc发现它们被放弃了一段时间),但是在新的F,G,H和I节点链结束时使用主标签,它将建立正确的血统。

相关问题