我发现了各种如何还原SVN提交的示例,例如
svn merge -r [current_version]:[previous_version] [repository_url]
要么
svn merge -c -[R] .
但是它们似乎都不起作用。我尝试了这些命令,并检查了手动更改的文件。
如何还原修订号为1944的提交?如何检查恢复已完成(不查看实际文件中的更改是否已恢复)?
我发现了各种如何还原SVN提交的示例,例如
svn merge -r [current_version]:[previous_version] [repository_url]
要么
svn merge -c -[R] .
但是它们似乎都不起作用。我尝试了这些命令,并检查了手动更改的文件。
如何还原修订号为1944的提交?如何检查恢复已完成(不查看实际文件中的更改是否已恢复)?
Answers:
这两个例子都必须起作用,但是
svn merge -r UPREV:LOWREV .
撤消范围
svn merge -c -REV .
撤消单个修订
用这种语法-如果当前目录是WC并且(如每次合并后必须完成),您将提交结果
您要查看日志吗?
svn: Merge source required
。没有骰子。
svn merge -c -42587,-42589 .
如果您使用的是TortoiseSVN客户端,则可以通过“显示日志”对话框轻松完成。
svn merge -r 1944:1943 .
应该在您的工作副本中还原r1944的更改。然后,您可以查看工作副本中的更改(使用diff),但是需要提交才能将还原应用于存储库。
svn merge -r 1944:1943 .
,但是什么都没有改变。
svn status
也不svn diff
给任何东西。
svn: Try 'svn help' for more info svn: Merge source required
svn merge -r 1945:1943 .
似乎奏效了。我想我理解:您需要将“错误”提交之前的版本合并到工作存储库中。如果您想对上一次提交进行简单的“还原”,就可以了。但是,如果要还原对1900版所做的更改,该怎么办?
首先,将工作副本还原为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版将是相同的,从而有效地还原了更改。
svn dump
,然后创建一个给定修订版本的克隆存储库svn load
。但是,当然,在正常情况下不应使用此功能。
$ git revert
。我发现使用Git这么长时间后学习SVN有点困难。
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
&& svn commit -m "undid rev $REV" $F
尽管已经给出的建议可能对某些人有用,但对我的情况却不起作用。执行合并时rev 1443
,更新为的用户rev 1445
仍会同步所有更改的文件,1444
即使它们等于1443
合并中的文件。我需要最终用户完全看不到更新。
如果要完全隐藏提交,可以通过以正确的修订版本创建新分支,然后交换分支来实现。唯一的事情是您需要删除并重新添加所有锁。
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
),您说对了,它确实可以插口。然而
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
。我对文件进行了更改,提交了它们,更新了构建计算机,运行了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
是interfaces/AngelInterface.php
在所有上述内容中指定。