将SVN之前的修订版本合并到工作副本中。

11
如果:
我正在SVN分支上进行工作,版本为5。
我进行了更改,提交以创建版本r6。
由于r6引入了问题,我回到了r5,并提交,创建了r7。
继续在r7上工作,最终提交了对r10的更改。
如何将在r6中所做的更改合并回我的工作副本?
我已经尝试过:
svn merge -r5:6 .

svn merge -r5:HEAD .

这两个似乎都没有起到作用。我做错了什么吗?

5个回答

7

试试这个:

svn merge --ignore-ancestry -r5:6 .

或者使用更新的语法:

svn merge --ignore-ancestry -c6 .

顺便说一下:我建议始终明确指定要使用哪些文件,而不是“。”


这在Subversion 1.7.19上完美运行,谢谢! - iboisver
我同意,这是问题的正确答案。谢谢Midis。 - Thibault

5
如果您使用的是相对较新的svn版本,您可以使用以下命令:

svn merge -c -6 .


(或者你想要还原的特定文件,而不是“。”)
这是一个简写形式:

svn merge -r6:5 .

如果您使用较早版本的Subversion(在1.6.x之前),则可以使用此语法。

这可能会在您的存储库中引入属性(如果我没记错,是svn:mergeinfo),至少如果您对整个目录执行合并。撤消对单个文件或一组文件的更改不会影响属性。如果您不希望这些属性添加到您的存储库中,则可能需要回退到补丁(自动化或手动)。


不起作用。Subversion 什么也没做。答案对我来说似乎也是错误的,-c -6 应该撤销 r6 的变更集。但我们想要重新引入 r6 的变更集。@Midis 的答案有效。 - Axel Bregnsbo

2

我对命令行svn不是很熟悉。但如果正确使用无法获得所需结果,我会尝试以下操作:

  1. 创建一个由r6修订版本与r5不同之处组成的补丁。
  2. 将其应用于工作副本。

1
谢谢,我已经考虑过这个问题并最终采用了 svn diff -r5:6 > patch.diff patch -p0 < patch.diff 的方法。如果有人知道如何通过svn实现这一点,我仍然很感兴趣听听他们的意见。 - user1692222
我做的也一样,只是重新应用一个差异文件。 - Brian Ledsworth

1

尝试撤销合并初始还原的修订版本。

例如,不要使用svn merge -r 5:6,而是尝试使用svn merge -r 7:6 .


0

你可以还原。创建一个标签。完成后,您可以将标签中的更改合并到您正在工作的分支中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接