2

我处于一个奇怪的困境 - 我们让开发人员多次跨分支执行“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 真正属于 master,而 C、D 和 E 属于分支。

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

我已经尝试了几件事,包括将 F 和 G 重新定位到 B 上,但这创建了 H' 和 I' 并且我不确定如何处理已经被拉/合并的旧 H 和 I。

更新

如果我只是想 git revert master 上的特定提交并将它们选择打包到分支上,我如何将提交“前置”到分支上?在这种情况下,我如何挑选 C 和 D 成为 J 的父母?

4

1 回答 1

1

+1 对 CharlesB 的建议。将 F 和 G 重新设置为 B 似乎可以解决这个问题。您可能还需要将 H 和 I 重新设置到最后。您可能需要按 -f(强制)使其进入原点,但一旦原点看起来应该如此,当用户拉取时,他们的存储库也应该自行纠正。

在 Git 中,原始节点将始终存在(直到 git gc 发现它们被遗弃了一段时间),但在新的 F、G、H 和 I 节点链的末端带有主标签,它将建立正确的血统。

于 2013-01-05T18:56:34.153 回答