> 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.
------------------------------------------------------------------------
12 回答
这两个例子都必须有效,但是
svn merge -r UPREV:LOWREV .
撤消范围svn merge -c -REV .
撤消单个修订版在这种语法中 - 如果当前目录是WC并且(在每次合并后必须完成),您将提交结果
你想看日志吗?
如果您正在使用TortoiseSVN客户端,则很容易完成via the Show Log dialog .
svn merge -r 1944:1943 .
应还原工作副本中r1944的更改 . 然后,您可以查看工作副本中的更改(使用diff),但是您需要提交才能将还原应用到存储库中 .首先,将工作副本还原为1943年 .
其次,检查即将提交的内容 .
第三,提交版本1945 .
第四,看看新的日志 .
无法“取消提交”修订版本,但您可以将工作副本还原为版本1943并将其作为版本1945提交 . 版本1943和1945将完全相同,从而有效地还原更改 .
正如它所说,以下将进行干运行 . HEAD是当前版本,PREV是previous,然后是文件或提交项的路径:
如果干运行看起来不错,请运行不带--dry-run的命令
验证修订的更改并重新提交 . 要浏览版本号,请尝试:
亚历克斯,试试这个:svn merge [WorkingFolderPath] -r 1944:1943
这救了我的命 .
我有同样的问题,在恢复之后我也没有看到旧代码 . 运行上面的命令后,我得到了一个干净的旧版本代码 .
我尝试了以上,(
svn merge
),你是对的,它做杰克 . 然而似乎工作,但不是永久性的(我的svn只是显示旧版本) . 所以我必须这样做
在我的特定情况下,我的目标是
interfaces/AngelInterface.php
. 我对文件进行了更改,提交了它们,更新了构建计算机运行的phpdoc编译器,发现我的更改是浪费时间 .svn log interfaces/AngelInterface.php
显示我的更改为r22060,之前对该文件的提交是r22059 . 所以我可以svn update -r 22059 interfaces/AngelInterface.php
,我最终得到的代码就像在-r22059中一样 . 然后 :-或者,我可以在目录上执行相同的操作,通过在上面的所有内容中指定
. -R
代替interfaces/AngelInterface.php
.虽然已经给出的建议可能适用于某些人,但它对我的情况不起作用 . 执行合并时,
rev 1443
上更新为rev 1445
的用户仍然会同步1444
中更改的所有文件,即使它们等于合并中的1443
. 我需要最终用户根本看不到更新 .如果要完全隐藏提交,可以通过在正确的修订版本中创建新分支,然后交换分支 . 唯一的事情是你需要删除并重新添加所有锁 .
这对我有用,也许对那里的其他人有帮助=)
如果要从历史记录中完全删除提交,还可以在特定修订版本上转储repo,然后导入该转储 . 特别:
svnrdump命令执行与svnadmin转储相同的功能,但适用于远程仓库 .
接下来只需将转储文件导入您选择的仓库 . 经测试,这在Beanstalk上运行良好 .