如何还原SVN提交?

如何还原SVN提交?,svn,revert,Svn,Revert,我已经找到了各种各样的例子来说明如何恢复SVN提交,比如 svn merge -r [current_version]:[previous_version] [repository_url] 或 但它们似乎都不起作用。我尝试了这些命令并检查了手动更改的文件 如何恢复版本号为1944的提交?如何检查恢复是否已完成(无需查看实际文件以确认更改已恢复)?svn merge-r 1944:1943。应恢复工作副本中r1944的更改。然后,您可以查看工作副本中的更改(使用diff),但您需要提交以将恢复

我已经找到了各种各样的例子来说明如何恢复SVN提交,比如

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

但它们似乎都不起作用。我尝试了这些命令并检查了手动更改的文件


如何恢复版本号为1944的提交?如何检查恢复是否已完成(无需查看实际文件以确认更改已恢复)?

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

不可能“取消提交”修订,但您可以将工作副本恢复到版本1943,并将其作为版本1945提交。1943年和1945年的版本将是相同的,有效地恢复了更改。

这两个示例都必须起作用,但是

svn合并-r UPREV:LOWREV.
undo范围

svn merge-c-REV.
undo single revision

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


想查看日志吗?

Alex,试试这个:
svn merge[WorkingFolderPath]-r 1944:1943
如果您使用的是客户端,这很容易完成。

下面的操作将进行一次试运行,正如它所说的那样。HEAD是当前版本,PREV是previous,然后是文件或提交项的路径:

svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk
如果干运行看起来不错,请在不使用--dry run的情况下运行命令

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

svn log
我试过上面的方法,(
svn merge
)你是对的,它确实有效。然而

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

或者,我可以在目录上执行相同的操作,方法是指定
-R
代替上述所有内容中的
接口/AngelInterface.php

虽然给出的建议可能对某些人有效,但对我的情况不起作用。执行合并时,更新为
rev 1445
rev 1443
用户仍然同步在
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>
copy-r 1443文件:///文件:///
svn移动文件:///文件:///
svn移动文件:///文件:///

这对我很有用,也许对其他人会有帮助。=)

首先,将工作副本恢复到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.
------------------------------------------------------------------------
这救了我的命

我也遇到了同样的问题,在返回后,我也没有看到旧代码。
运行上述命令后,我得到了一个干净的旧版本代码。

如果您想从历史记录中完全删除提交,您还可以在特定版本中转储repo,然后导入该转储。具体而言:

svnrdump dump -r 1:<rev> <url> > filename.dump
svnrdump dump-r 1:>filename.dump
svnrdump命令执行与svnadmin dump相同的功能,但可用于远程repo


接下来,只需将转储文件导入您选择的repo。这在Beanstalk上运行良好。

非常旧的线程,但是Intellij没有答案。要恢复单个提交,请执行以下操作:

转到: Subversion->集成目录


不起作用,需要合并源。尝试了
svn merge-r 1944:1943。
但是没有任何更改。自r1944以来,存储库是否已升级?如果是这样的话,在r1943和r1944之间的变更的同一行上是否有冲突的变更?我在1945年修订版,似乎没有冲突。
svn status
svn diff
都没有给出任何信息。错误:
svn:Try'svn help'获取更多信息svn:Merge source required
但是
svn Merge-r 1945:1943。
似乎已经起作用。我想我明白了:您需要将“错误”提交之前的版本合并到您的工作存储库中。当您想对上一次提交进行简单的“还原”时,这是可以的。但是,如果您想恢复1900版所做的更改,该怎么办?为了准确起见,我想指出,如果您拥有对存储库的管理员访问权限,您可以“取消提交”。通过使用
svn dump
然后
svn load
创建一个克隆存储库,直到给定版本。但是,当然,这不应该在正常情况下使用。我不想取消提交,我想创建一个新的提交编号,并反转某个提交。集合说我已经签出了1944版,在1945年做了一个承诺,我想“恢复”。然后我想要一个版本1946,它的文件和版本1944中的文件相同。(当然历史除外)但问题仍然是:如何做到这一点?什么是命令?//,@Alex,我也对这个很感兴趣,尤其是类似于
$git revert
的东西。在使用Git这么长时间后,我发现学习SVN有点困难。@dwjohnston-是的,合并总是在WC中执行,而且它不是服务器端任务
SVN:Merge source required
。没有骰子。@2rs2ts看起来您忘记了尾随的点来指定“在当前目录中执行此操作”。您也可以同时执行多个单次提交:
svn merge-c-42587,-42589。
@ahnbizcad-revision(single),您想撤消它,因为它们都不起作用,所以您从来没有接受过答案吗?如果您想要一个文字答案,请使用“svn merge-c-1944。”要检查它是否有效:“svn diff”另请参阅。如果情况可能重复,我有1943(良好提交),然后1944(错误提交),然后1945(良好提交),然后1946(良好提交)。现在我只想删除1944(错误提交),并保留1944年之后的所有修订,这意味着我希望得到类似194319451946(仅删除1944)的结果从这些修订中,我该怎么办?
> svn status
> 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.
------------------------------------------------------------------------
svn merge -c -M PATH
svnrdump dump -r 1:<rev> <url> > filename.dump