Git:如何反向合并提交?

Mot*_*Mot 114 git merge

使用SVN很容易反向合并提交,但如何使用Git做到这一点?

Mar*_*son 114

要还原合并提交,您需要使用:git revert -m.因此,例如,恢复近期最合并提交使用序号为1的家长,你可以使用:
git revert -m <parent number>

要恢复合并提交前的最后一次提交,你会怎么做:
git show <merge commit SHA1>

Merge: e4c54b3 4725ad2看父母,编号是他们出现如顺序git revert -m <parent number>

git merge文档:http: //schacon.github.com/git/git-merge.html

git merge讨论(令人困惑但非常详细):http: //schacon.github.com/git/howto/revert-a-faulty-merge.txt

  • 如何获得与父母相关的"数字"?分支是否具有内在数字'id'? (33认同)
  • 这仍然没有提供足够的信息来说明 git 显示的结果如何与父编号相关。“它们出现的顺序”是从 1 开始的吗?0 为基础?具体来说,在此示例中,父级 1 的 SHA1 是什么?e4c54b3 还是 4725ad2? (9认同)
  • 使用`git show <merge commit SHA1>`来查看父项,编号是它们出现的顺序,例如`Merge:e4c54b3 4725ad2` (6认同)
  • 例如:`git revert -m 1 SHA1`这个命令对我来说还原了一个合并提交,它是在head之前进行了几次合并提交并且下面有很多提交. (6认同)
  • 哪个是父母?e4c54b3 或 4725ad2? (3认同)
  • @cowlinator 运行`git help revert` 并查看`-m` 标志说:_此选项指定主线的父编号(从1 开始)并允许revert 反转相对于指定父的更改。_ 尽管要小心b/c 它还说:_Reverting a merge commit 声明您将**永远**不希望合并带来的树更改。因此,稍后的合并将 ** 只引入由不是先前恢复的合并的祖先的提交引入的树更改。 **_ (3认同)

Ben*_*mes 104

要创建一个"撤消"过去提交更改的新提交,请使用:

$ git revert <commit>
Run Code Online (Sandbox Code Playgroud)

通过重新定位然后重置,实际上也可以从过去的任意点删除提交,但如果您已经将提交推送到另一个存储库(或其他人已从您那里撤出),您实际上不希望这样做.

  • 您可能需要向`git revert`提供`-m <parent number>`选项以指定要还原的更改.如果要撤消未发布历史记录的合并,请使用`git reset --hard HEAD ^ 1`. (28认同)
  • 请注意,使用`-m`表示未合并分支的未来合并将不包括合并之前的更改!请参阅http://schacon.github.com/git/howto/revert-a-faulty-merge.txt以了解重新合并未合并分支的正确方法. (4认同)
  • Jakub:如果你要恢复合并提交,那是真的,但在Subversion术语中,"反向合并"实际上只是恢复任何类型提交的名称. (3认同)
  • 超链接已损坏。应该有未来证明的答案。 (2认同)

Rud*_*dog 5

如果我理解正确的话,你说的是做一个

svn merge -rn:n-1
Run Code Online (Sandbox Code Playgroud)

退出较早的提交,在这种情况下,您可能正在寻找

git revert
Run Code Online (Sandbox Code Playgroud)