我们遇到的情况是有人搞砸了我们SVN服务器的提交。许多文件被删除等。
问题:使先前(向错误提交)修订版HEAD修订版的技术是什么?我已经在这里看到了关于为1个文件执行此操作的讨论,但我们想让它像最后一次提交从未发生过。有什么想法吗?
所有这些答案似乎都是正确的。我将abatishchev的答案标记为正确的答案仅仅因为我使用的是Tortoise SVN而且它是我实际使用的方法。
答案 0 :(得分:19)
最简洁的方法是undo changes
您可以使用svn merge来“撤消”工作副本中的更改,然后将本地修改提交到存储库。您需要做的就是指定反向差异。 (您可以通过指定
--revision 303:302
或等效的--change -303
来执行此操作。)
我意识到它并没有“让它像最后一次提交从未发生过”,因为提交仍然是历史的一部分,但我相信在历史中保留这个糟糕的提交会更好。
它可能包括一些可以查询/比较的正在进行的工作,以便轻松地重新制作新的正确提交。
即使:
obliterate
命令,svndumpfilter
作为一种可能的解决方法(因为它提供了通过充当基于路径的过滤器快速轻松地修改转储文件数据的能力) ...最好不要尝试将SCM工具扭曲成一开始就不应该做的事情。
历史化(以及与分支的并行化)是SCM的两个主要特征。
答案 1 :(得分:9)
也许你可以显示日志,检查以前的版本(n-1),在上下文菜单中选择Revert to this revision并提交更改(它将变为n + 1,其中n是当前坏头)
答案 2 :(得分:1)
您可以使用svnadmin dump
和svnadmin load
执行此操作。这是一种非常蛮力的方式,但我相信这是唯一的方法。
此问题的答案可能有所帮助:Nuking huge file in svn repository
答案 3 :(得分:0)
你可以svn cp特定的修订,所以如果没有你想要保存的干预操作,你可以查看违规目录,然后svn cp旧版本。请参阅Peg and Operative Revision section of the book
答案 4 :(得分:0)