我意外地将太多文件提交到SVN存储库并更改了一些我不想做的事情。 (叹气。)为了将它们恢复到先前的状态,我能想到的最好的是
svn rm l3toks.dtx
svn copy -r 854 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
哎呀!有没有更好的方法?为什么我不能写这样的东西:
svn revert -r 854 l3toks.dtx
好的,我只使用v1.4.4,但是我浏览了1.5分支的更改列表,我看不到与此直接相关的任何内容。我错过了什么吗?
编辑:我想我不够清楚。我认为我不想反向合并,因为那时我将失去我做想要做出的改变!假设fileA
和fileB
都已修改,但我只想提交fileA
;不小心打字
svn commit -m "small change"
提交这两个文件,现在我想回滚fileB
。反向合并使得这项任务不比我上面概述的步骤更容易(据我所知)。
答案 0 :(得分:243)
答案 1 :(得分:35)
答案 2 :(得分:32)
假设我已将本地文件更新为最新版本,即854.然后,我想获得一个较旧的版本 - 之前几个版本的文件版本,比如修订版851.
复制可行:
svn copy -r 851 svn+ssh://<repository URL>/l3toks.dtx ./l3toks.dtx
..但是,我不能为了回购网址而烦恼:)
更新看似可能有效:
svn up -r 851 ./l3toks.dtx
...但是,它也将本地副本标记为“刚刚签出”,或者更确切地说“与在线修订相同”(即在Tortoise / RabbitVCS中,您将获得绿色OK复选标记) - 这意味着您无法执行{{ 1}}:仅仅因为本地svn ci -m "rolled back to r 851"
可执行文件不会注意到任何本地更改,并且不会将任何内容上传到在线存储库。
而且,正如已经回答的那样,反向合并有效 - 但在这种情况下,不应该依赖于快捷语法;但具体说来是:
subversion
我必须承认 - 我永远不会理解句子“将r854反转合并到r852到文件”这意味着“刚刚得到你文件的r851,并覆盖了你以前在本地所做的一切 - 它被标记为与最新的在线修订版本不同,因此您可以在线查看它作为新的“回滚”修订版“,但我猜(并希望:))就是它的作用:) / p>
在此之后,如果我们在本地获得正确的修订,可以使用svn merge -r HEAD:851 l3toks.dtx
--- Reverse-merging r854 through r852 into 'l3toks.dtx':
U l3toks.dtx
快速确认;此外,该文件将在Tortoise / RabbitVCS中标记为红色感叹号(即与最新提交的版本不同),因此此次svn diff
可以运行。
另外,请注意,如果你最后在反向合并之后改变主意(即你仍然希望继续研究最新的,HEAD修订版,这里是854 - 在你回到本地851之后,但是避风港我还没有提交回滚,你不应该使用svn ci -m "rolled back to r 851"
,因为它只是说它已经是“在修订版854 ”;请改用svn up
或类似的......
干杯!
参考:How to Roll Back Changes using Subversion - Jacob Wright – Flex, AIR, PHP, etc.
编辑:......显然,与svn revert --recursive .
完全相同的效果可以通过以下方式实现:
svn merge -r HEAD:851 l3toks.dtx
答案 3 :(得分:10)
我最近不得不恢复到特定版本来调试旧版本,这就像魔法一样:
svn up -r 3340 (or what ever your desired revision number)
我必须使用“tc”选项解决所有冲突,因为我不关心本地更改(检查了我在回复之前所关注的所有内容)
回到头部修改也很简单:
svn up
答案 4 :(得分:5)
您正在寻找的是“反向合并”。你应该参考SVN书中关于合并功能的文档(作为luapyad,或者更准确地说是该帖子上的第一个评论者,指出)。如果您正在使用Tortoise,您也可以进入日志视图并右键单击并在出错的地方选择“从此修订版还原更改”。
答案 5 :(得分:4)
反向合并正是你想要的(参见luapyad的回答)。只需将合并应用于错误提交的文件,而不是整个目录。
答案 6 :(得分:4)
如果您只想撤消上次登记,可以使用以下
svn merge -r head:prev l3toks.dtx
这样,您就不必寻找当前和以前的版本号。
答案 7 :(得分:4)
svn merge将合并修订版,而不是还原它们。即如果您在HEAD版本中添加了一些内容,然后将其与先前版本合并,则更改将保持不变。
我使用svn cat然后将其重定向到文件中:
svn cat -r 851 l3toks.dtx > l3toks.dtx
然后你在该文件中有851内容,可以重新检入。
答案 8 :(得分:3)
如果您将 Eclipse IDE 与 SVN插件一起使用,您可以执行以下操作:
这会将文件还原为您想要的修订版。请记住,SVN会将更改视为新提交。也就是说,更改获得新的修订号,旧版本和新版本之间没有链接。您应该在提交注释中指定您将这些文件还原为特定版本。