我如何恢复SVN提交?

我发现了如何恢复SVN提交的各种示例

svn merge -r [current_version]:[previous_version] [repository_url] 

要么

 svn merge -c -[R] . 

但他们都没有工作。 我尝试了这些命令,并检查手动更改的文件。

如何恢复1944版本的提交? 我如何检查恢复已经完成(没有看到实际的文件中的变化已经恢复)?

这两个例子都必须工作,但是

svn merge -r UPREV:LOWREV . 撤消范围

svn merge -c -REV . 撤消单个修订

在这个语法中 – 如果当前目录是WC,并且(如在每次合并之后必须完成的那样),您将提交结果

你想看到日志?

如果您使用的是TortoiseSVN客户端,则可以通过“显示日志”对话框轻松完成。

svn merge -r 1944:1943 . 应该恢复工作副本中r1944的更改。 然后,您可以查看工作副本中的更改(使用diff),但是您需要提交才能将还原应用到存储库中。

首先,将工作副本恢复到1943年。

 > svn merge -c -1943 . 

其次,检查要提交的内容。

 > svn status 

第三,提交1945版。

 > svn commit -m "Fix bad commit." 

第四,看看新的日志。

 > svn log -l 4 ------------------------------------------------------------------------ 1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line Fix bad commit. ------------------------------------------------------------------------ 1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line This is the bad commit that I made. ------------------------------------------------------------------------ 1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line This was a good commit. ------------------------------------------------------------------------ 

这是不可能的“取消”一个修订,但你可以恢复你的工作副本到1943年版本,并承诺作为版本1945年。1943年和1945年的版本将是相同的,有效地恢复变化。

正如它所说的那样,下面将会做一个干预。 HEAD是当前版本,PREV是先前的,然后是到您的文件或提交项目的path:

 svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk 

如果干运行看起来不错,运行命令没有 – 干运行

validation修订中的更改并重新提交。 要浏览版本号,请尝试:

 svn log 
 F=code.c REV=123 svn diff -c $REV $F | patch -R -p0 \ && svn commit -m "undid rev $REV" $F 

亚历克斯,试试这个:svn merge [WorkingFolderPath] -r 1944:1943

我试过以上,( svn merge ),你是对的,它没有杰克​​。 然而

 svn update -r <revision> <target> [-R] 

似乎工作,但不是永久的(我的svn只是显示一个旧版本)。 所以我必须

 mv <target> <target backup> svn update <target> mv <target backup> <target> svn commit -m "Reverted commit on <target>" <target> 

在我的具体情况下,我的目标是interfaces/AngelInterface.php 。 我对文件进行了更改,提交了这些文件,更新了构build计算机运行phpdoc编译器,发现我的更改是浪费时间。 svn log interfaces/AngelInterface.php显示我的更改为r22060和以前提交该文件是r22059。 所以我可以svn update -r 22059 interfaces/AngelInterface.php ,我结束了代码,因为它是在-r22059再次。 然后 :-

 mv interfaces/AngelInterface.php interfaces/AngelInterface.php~ svn update interfaces/AngelInterface.php mv interfaces/AngelInterface.php~ interfaces/AngelInterface.php svn commit -m "reverted -r22060" interfaces/AngelInterface.php 

或者,我可以通过指定在目录上做同样的事情. -R . -R代替以上所有的interfaces/AngelInterface.php

虽然已经提出的build议可能适用于某些人,但对我的情况并不适用。 执行合并时,更新为rev 1445 rev 1443用户仍然同步1444更改的所有文件,即使它们等于合并中的1443 。 我需要最终用户根本看不到更新。

如果你想完全隐藏提交,可以通过在正确的版本中创build一个新的分支,然后交换分支。 唯一的是你需要删除并重新添加所有的锁。

 copy -r 1443 file:///<your_branch> file:///<your_branch_at_correct_rev> svn move file:///<your_branch> file:///<backup_branch> svn move file:///<your_branch_at_correct_rev> file:///<your_branch> 

这为我工作,也许这将有助于其他人在那里=)

 svn merge -c -M PATH 

这救了我的命。

我有同样的问题,恢复回来后,我也没有看到旧的代码。 运行上面的命令后,我得到一个干净的旧版本的代码。

如果你想完全删除历史提交,你也可以在特定的版本中做一个repo转储,然后导入这个转储。 特别:

 svnrdump dump -r 1:<rev> <url> > filename.dump 

svnrdump命令执行与svnadmin转储相同的function,但在远程仓库上工作。

接下来只需将转储文件导入您select的回购。 这个testing在Beanstalk上运行良好。

没有办法恢复到一个特定的版本bcoz,因为我们人类在合并两条河的过程中得到很好的教导,但是不能将咖喱与咖喱分开(也有math上的版本)。 回滚代码的最好和安全的方法是在两个地方查看代码。 所以在提交(从第一次结帐)后,你发现麻烦你可以提交从第二个结帐。