Git:在不影响其余提交的情况下恢复旧的合并

Git: Reverting An Old Merge Without Affecting the Rest of The Commits

当我转到我想还原的提交(反向提交)时,它给了我

error: commit X is a merge but no -m option was given.

这就像一个 3 周前的提交,许多其他人在那次合并之后推送了其他内容。我想删除在该合并中所做的更改,而不会引起大量冲突。

如果我重置到它之前的提交(提交 Y),此后的所有内容都将消失,如果我那样推动它,我假设如果有人更改了文件中的任何内容,将会有很多冲突存在于该提交中(在 Y 而不是 X 中)。

是否有任何干净、希望简单的方法可以做到这一点?抱歉,如果我假设不正确,我是 git 新手。请放宽我。

您不想使用 git reset 因为那会重写已经推送的历史记录。应该尽可能避免这种情况。

错误信息告诉你想做什么:-m选项告诉git你想保留两个父提交中的哪一个,以便它可以恢复另一个:

git revert -m 1 <hash of the merge commit>

请注意,如果您希望在将来某个时候将此合并提交中的更改合并回来,您将需要还原此提交(即还原更改的提交),然后再次合并所有内容.

博客 post Undoing Merges 有更多关于此的信息,并且可能比我解释得更好。