50

我只是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

4 回答 4

121

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

svn revert -R .

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

于 2009-12-13T16:24:06.117 回答
7

只要您还没有提交,您就可以随时进行还原以撤消所有更改。

于 2009-12-13T16:23:46.790 回答
2

我面临同样的情况,我也有一些我不想失去的其他变化。所以,不是只svn revert针对冲突项目进行完全递归还原,而是对我有好处

svn revert baz1 baz2
于 2013-10-08T13:10:29.247 回答
-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 .是添加的文件都被正确删除。

于 2009-12-13T16:25:37.033 回答