【发布时间】:2010-12-21 00:52:56
【问题描述】:
使用 SVN 很容易反向合并提交,但如何使用 Git 来实现呢?
【问题讨论】:
-
我不认为这就是问题的意思。 SVN 中的反向合并还将更改从提交还原为本地更改,因此您可以编辑它们并再次提交。
使用 SVN 很容易反向合并提交,但如何使用 Git 来实现呢?
【问题讨论】:
要恢复 merge 提交,您需要使用:git revert -m <parent number>。例如,要使用编号为 1 的父级恢复最近的合并提交,您可以使用:
git revert -m 1 HEAD
要在最后一次提交之前恢复合并提交,您可以:
git revert -m 1 HEAD^
使用git show <merge commit SHA1>查看父母,编号是他们出现的顺序,例如Merge: e4c54b3 4725ad2
git 合并文档: http://schacon.github.com/git/git-merge.html
git 合并讨论(令人困惑但非常详细): http://schacon.github.com/git/howto/revert-a-faulty-merge.txt
【讨论】:
git show <merge commit SHA1>查看父母,编号是他们出现的顺序,例如Merge: e4c54b3 4725ad2
git revert -m 1 SHA1 该命令对我有用,可以恢复合并提交,该合并提交是 head 之前的几个合并提交,并且下面有许多提交。
git help revert 并查看 -m 标志说:此选项指定主线的父编号(从 1 开始)并允许 revert 以反转相对于指定的父级。 虽然要小心 b/c,但它也说:还原合并提交声明您将永远希望合并带来的树更改。因此,以后的合并将仅引入不是先前恢复的合并的祖先的提交引入的树更改。
要创建一个“撤消”过去提交的更改的新提交,请使用:
$ git revert <commit-hash>
也可以通过变基然后重置从过去的任意点实际删除提交,但是如果您已经将提交推送到另一个存储库(或者其他人已经拉取),您真的不想这样做来自你)。
如果您之前的提交是合并提交,您可以运行此命令
$ git revert -m 1 <commit-hash>
请参阅schacon.github.com/git/howto/revert-a-faulty-merge.txt 了解重新合并未合并分支的正确方法
【讨论】:
git revert 提供-m <parent number> 选项以指定要还原的更改。如果要撤消未发布历史记录的合并,请使用git reset --hard HEAD^1。
-m 意味着来自未合并分支的未来合并将不包括合并之前的更改!请参阅schacon.github.com/git/howto/revert-a-faulty-merge.txt 了解重新合并未合并分支的正确方法。
如果我理解正确,你说的是做一个
svn merge -rn:n-1
要退出较早的提交,在这种情况下,您可能正在寻找
git revert
【讨论】:
git reset --hard HEAD^
使用上述命令恢复合并更改。
【讨论】:
如果您不想提交,或者想稍后提交(提交消息仍会为您准备好,您也可以编辑):
git revert -n <commit>
【讨论】: