SVN反向合并?

时间:2009-12-18 21:14:41

标签: svn

我的SVN存储库在修订版497中是完美的。我执行了几次错误的提交,所以现在它处于修订版HEAD。我看到要回滚你应该使用这样的命令:

svn merge -r HEAD:497 .

在工作目录中(工作目录位于HEAD修订版)。但这是正确的命令吗?或者我使用HEAD:498?还是496?我已经运行了该命令,当前版本似乎与497不同,因为当我更新-r 497(或者当我有497个工作副本并且我更新-r HEAD)时,会发生大量文件更新

我是否有某种fencepost问题,其中HEAD:497实际上还原为496,还是什么?或者,当我更新时,尽管HEAD和497是相同的,但SVN会追溯到每个版本吗?

修改

正如我之前所说的那样,当我在497和我合并的HEAD之间进行更新时,我发现有很多文件发生了变化。我认为如果497和HEAD相同,它会检测到,并且不会发生文件更改;它只会说“更新到修订版497.”那么我的命令错了,还是这个想法错了? (如果是的话,为什么?)

9 个答案:

答案 0 :(得分:73)

如果你的回购在修订版497处于原始状态,那么我认为你是对的,你需要做一个:

svn merge -r HEAD:497 .

该merge命令只会更改工作副本中的文件,因此请记住还要提交更改以更新repo中的HEAD。

在进行合并,然后进行提交后,尝试将版本497与HEAD进行比较,它们应该相同。

答案 1 :(得分:22)

如果要撤消r123,则需要svn merge -r 123:122 .

这意味着您需要运行

svn merge -r HEAD:497 .

验证运行:

svn diff -r 497

答案 2 :(得分:4)

答案 3 :(得分:4)

对于任何使用TortoiseSVN的人,你只需要显示"显示日志N#34;对话框从那里恢复提交:

http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-howto-rollback.html

答案 4 :(得分:1)

要退出不希望的更改(也许您提交了其中包含调试语句的其他文件,以及您确实要提交的内容),请说错误的更改是-r10:

svn update
svn merge -r10:9 <URL of your repository base> .

现在您可以只返回 想要提交的文件:

svn update
svn update -r10
svn commit <just that one file>   # this is the command you meant to type from the beginning

答案 5 :(得分:0)

如果您想快速可靠地回滚到特定版本,那么只需查看旧版本的存储库。

运行svn info以提醒自己存储库的URL是什么,然后创建一个新文件夹并检查所需的修订版本:

cd <your new folder>
svn checkout <URL> -r 497 .

然后,您可以针对现有文件夹区分该文件夹,如果需要,可以从那里将整个修订版提交回存储库。

答案 6 :(得分:0)

答案 7 :(得分:0)

考虑HEAD:150恢复r1 = 100和r2 = 90

  1. svn up
  2. svn merge -r 100:99
  3. svn merge -r 90:89
  4. 注意:这些更改将不还原 EXTERNALS文件夹!

答案 8 :(得分:0)

在SVN中反向合并

  • 如果是文件级
  • SVN会将公用文件的内容保留在特定的工作副本中 文件的修订和工作副本的HEAD修订。

  • 如果它是文件夹级别

  • 在SVN反向合并中,如果在特定版本中找不到文件,则它将 保持工作副本不变。