如何恢复SVN提交?

Ale*_*lex 293 svn revert

我找到了各种如何恢复SVN提交的例子

svn merge -r [current_version]:[previous_version] [repository_url]
Run Code Online (Sandbox Code Playgroud)

要么

svn merge -c -[R] .
Run Code Online (Sandbox Code Playgroud)

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

如何还原修订号为1944的提交?如何检查还原已完成(未查看实际文件中的更改已被还原)?

Laz*_*ger 437

这两个例子都必须有效,但是

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

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

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

你想看日志吗?

  • @ 2rs2ts看起来好像忘记了尾随点来指定'在当前目录中执行此操作'. (26认同)
  • `svn:需要合并来源`.没有骰子. (14认同)
  • 你也可以同时做多个单一提交:`svn merge -c -42587,-42589 .` (12认同)
  • @dwjohnston - 是的,合并**总是在WC**中执行,而且它不是服务器端的任务 (9认同)
  • 哪个转速是'REV`? (3认同)
  • 你需要在工作副本中这样做吗? (2认同)
  • 对于第二个,如果它不起作用,您可能忘记了修订号之前的 - (连字符)。 (2认同)

dod*_*der 128

如果您正在使用TortoiseSVN客户端,则可以通过"显示日志"对话框轻松完成.

  • 什么?TortoiseSVN是一个上下文菜单,以及它产生的对话框."你不再有上下文菜单"是什么意思?肯定有! (19认同)
  • 这是迄今为止最简单的方法 (5认同)
  • 这已经过时了.当前版本中不再有客户端可用的Context-Menu. (3认同)
  • 以防您稍后看到它,它仍然在那儿。在显示日志屏幕中,右键单击修订,然后有一个“还原到此修订”选项。这是在TortoiseSVN 1.9.4 Build 27285中。我刚刚使用它,可以告诉您它工作正常。 (2认同)

ono*_*n15 60

svn merge -r 1944:1943 .应该还原工作副本中r1944的更改.然后,您可以查看在您的工作复印件(DIFF)的变化,但你需要以该还原应用到存储库提交.

  • 错误:`svn:尝试'svn help'获取更多信息svn:合并源代码` (7认同)
  • 但是`svn merge -r 1945:1943 .`似乎已经奏效了.我想我理解:您需要将"错误"提交之前的版本合并到您的工作存储库中.当你想对前一次提交做一个简单的"恢复"时,这是可以的.但是,如果您想恢复1900版本所做的更改,该怎么办? (5认同)
  • 不起作用,需要合并源.试过`svn merge -r 1944:1943.'而不是,但没有任何改变. (4认同)

Sha*_*tin 42

首先,将工作副本还原为1943年.

> svn merge -c -1943 .
Run Code Online (Sandbox Code Playgroud)

其次,检查即将提交的内容.

> svn status
Run Code Online (Sandbox Code Playgroud)

第三,提交版本1945.

> svn commit -m "Fix bad commit."
Run Code Online (Sandbox Code Playgroud)

第四,看看新的日志.

> 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.
------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


Jak*_*rka 26

无法"取消提交"修订版本,但您可以将工作副本还原为版本1943并将其作为版本1945提交.版本1943和1945将完全相同,从而有效地还原更改.

  • 只是为了令人烦恼的准确,我会评论说,如果你有管理员访问存储库,你可以"取消提交".这是通过使用`svn dump`然后`svn load`创建一个克隆存储库直到给定的版本.但是,当然,这不应该在正常情况下使用. (18认同)
  • 我不想解除承诺,我想创建一个新的提交号,并且反转某个提交.套装说我已经检查了1944年的版本,在1945年做了一个提交,我想"恢复".然后我想要一个版本1946,其文件与版本1944中的文件相同.(当然,除了历史.)但问题仍然是:如何做到这一点?有什么命令? (4认同)

小智 9

正如它所说,以下将进行干运行.HEAD是当前版本,PREV是先前的,然后是您的文件或已提交项目的路径:

svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk
Run Code Online (Sandbox Code Playgroud)

如果干运行看起来不错,请运行不带--dry-run的命令

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

svn log
Run Code Online (Sandbox Code Playgroud)


小智 5

F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
    && svn commit -m "undid rev $REV" $F
Run Code Online (Sandbox Code Playgroud)