如何撤消不产生合并提交的合并?

jef*_*eon 5 git merge

我从master创建了一个实验分支,并在实验分支上做了四次提交.与此同时,大师仍然保持着最后的状态.现在,我希望以这样的方式合并我的实验分支,以便将来能够轻松撤消此合并.

当我尝试搜索时,撤消合并的最简单方法在我看来就像git revert hash_of_merge_commit.

但是,这仅在我将master与实验分支合并时获得合并提交哈希时才有效.在这种情况下,由于master的HEAD没有进展,当我尝试合并时,我只是将四个新的提交添加到master,这意味着要撤消此合并,我需要手动记住并还原每个这些单独的提交在未来.

有更好的方法吗?

Tre*_*ham 14

其他的回答者似乎一直关注防止这种情况发生.如果快速转发合并已经发生并被推送,这是一个解决方案:

  1. git checkout -b my-undo-branch
  2. git reflog show master - 在合并之前找到最后一次提交
  3. git reset --keep SHA - 使用上一步中的SHA

此时,验证此分支是否处于您希望master进入的状态.现在只需要在这两个分支之间进行差异并将其提交给master:

  1. git checkout master
  2. git diff master my-undo-branch --no-prefix > patchfile
  3. patch -p0 < patchfile

然后,最后,删除patchfile,git add所有更改,以及git commit它们.


Cha*_*esB 0

--no-ff您应该通过传递到合并命令来合并而不快进。

这样,总是会创建一个新的提交,并且您将能够恢复它。

通常,合并功能分支应始终以非快进方式完成,从而使功能的集成在master分支历史记录中清晰可见。