Git 如何撤销一个';s已经被拉/合并了?
我陷入了一个奇怪的困境——我们让一个开发人员多次跨分支执行“git拉-再基”,而我正试图修复损坏。我们的图表最初是这样的:Git 如何撤销一个';s已经被拉/合并了?,git,git-merge,git-rebase,Git,Git Merge,Git Rebase,我陷入了一个奇怪的困境——我们让一个开发人员多次跨分支执行“git拉-再基”,而我正试图修复损坏。我们的图表最初是这样的: [master] A--B (origin/master) ___\________________________ [branch] \ C--D--E (origin/branch) [master] A--B---------------H--I (origin/master) \ / C--D--E-
[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)
在错误合并之后,我们的图形现在看起来如下所示:
[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属于分支
恢复图形的最佳方法是什么?Commit I已经被拉到其他分支和本地存储库上。是否是恢复单个提交的唯一选项?上面的图表被简化了——有40多个提交被错误地合并
我尝试了一些方法,包括将F和G重设为B,但这就产生了H'和I',我不确定如何处理已经被拉/合并的旧H和I
更新
如果我只是想git将master和cherry pick上的特定提交还原到分支上,那么如何“预先”提交到分支上?在这种情况下,我该如何挑选C和D成为J的父母呢?+1接受CharlesB的建议。将F和G重设为B似乎可以解决问题。您可能还需要重新设置H和I的基址,直到结束。您可能需要按-f(force)将其放入origin,但一旦origin看起来应该这样做,随着用户的拉动,他们的存储库也应该自行更正
在Git中,原始节点将始终存在(直到Git gc发现它们被放弃了一段时间),但在新的F、G、H和I节点链结束时使用主标签,它将建立正确的沿袭。将F和G重定为B是正确的方法。旧的H和I不再有效,将被H'和I'取代,所以我不完全理解你的问题