如何撤消合并(没有提交)?

时间:2009-12-13 16:21:23

标签: svn merge commit undo

我只是做了一个svn merge来将更改从主干合并到分支:

$ svn merge -r328:HEAD file:///home/user/svn/repos/proj/trunk .
--- Merging r388 through r500 into '.':
A    foo
A    bar
   C baz1
   C baz2
U    duh
[...]

但是冲突太多了,所以我想撤消这个。

一种方法是提交然后合并。但由于冲突我无法承诺。在这种情况下撤消的最佳方法是什么?

4 个答案:

答案 0 :(得分:107)

从工作副本的顶部递归还原:

svn revert -R .

您需要手动删除已添加的文件。在恢复之后,添加的文件将保留在磁盘上,但它们将处于非跟踪状态(“?foo”)

答案 1 :(得分:6)

只要您没有提交,您就可以随时恢复以撤消所有更改。

答案 2 :(得分:2)

我遇到了同样的情况,我还有其他一些我不想失去的变化。 因此,对于冲突的项目而言,只有svn revert而不是完全递归还原对我来说是好的

svn revert baz1 baz2

答案 3 :(得分:-11)

无论如何都要对所有冲突做svn resolve并提交:

$ svn resolved baz1
$ svn resolved baz2
$ svn ci -m "oops. bad merge. will revert."
Transmitting file data ......
Committed revision 501.

然后,通过合并回到原来的地方正式撤消它:

$ svn merge -r501:500
--- Reverse-merging r319 into '.':
[...]

就是这样,合并已在目录中撤消。现在也承诺:

$ svn ci -m "bad merge has been undone"
Transmitting file data ......
Committed revision 502.

svn revert -R .方法的优势在于添加的文件都已正确删除。