如何在不还原的情况下撤消 Subversion (svn) 合并?
How can I undo a Subversion (svn) merge without reverting?
在试图帮助一位同事找出 svn 历史中某些单元测试出错的地方时,我仓促地将我认为可能是问题的提交合并到他的工作副本中:
svn merge -c -1234 .
接着问,"wait... you're working copy was clean right?"。不幸的是没有。所以快速恢复不是一个好的选择。我试图彻底撤消它 (svn merge -c 1234
) 但什么也没发生。幸运的是,他确切地知道哪些文件被更改了,所以我们制作了一个补丁,恢复了所有修改过的文件,然后应用了补丁。但是,我想知道是否有更简洁的方法来摆脱这种情况。
我意识到 svn merge -c 1234
不起作用的原因是我们已经超过了修订版 1234,所以 svn 认为不需要做任何事情。后来我在办公桌上尝试了一个解决方案,它有效地下载了提交 1234 的差异,然后将其作为补丁应用。请注意,我使用的是 1234
而不是 -1234
,这本来是一个反向差异。
svn diff -c 1234 > undo.patch
svn patch undo.patch
如果我再次回到原来的情况,这将彻底撤消反向合并,同时保留我同事的更改。
你最初的想法几乎是正确的。 Subversion 的方法是
svn merge -c 1234 . --ignore-ancestry
重新应用反向合并提交。
在试图帮助一位同事找出 svn 历史中某些单元测试出错的地方时,我仓促地将我认为可能是问题的提交合并到他的工作副本中:
svn merge -c -1234 .
接着问,"wait... you're working copy was clean right?"。不幸的是没有。所以快速恢复不是一个好的选择。我试图彻底撤消它 (svn merge -c 1234
) 但什么也没发生。幸运的是,他确切地知道哪些文件被更改了,所以我们制作了一个补丁,恢复了所有修改过的文件,然后应用了补丁。但是,我想知道是否有更简洁的方法来摆脱这种情况。
我意识到 svn merge -c 1234
不起作用的原因是我们已经超过了修订版 1234,所以 svn 认为不需要做任何事情。后来我在办公桌上尝试了一个解决方案,它有效地下载了提交 1234 的差异,然后将其作为补丁应用。请注意,我使用的是 1234
而不是 -1234
,这本来是一个反向差异。
svn diff -c 1234 > undo.patch
svn patch undo.patch
如果我再次回到原来的情况,这将彻底撤消反向合并,同时保留我同事的更改。
你最初的想法几乎是正确的。 Subversion 的方法是
svn merge -c 1234 . --ignore-ancestry
重新应用反向合并提交。