将SVN中的单个文件恢复为特定版本

Gök*_*ver 172 svn revert

我有一个如下所示的SVN仓库中的文件,我想恢复到以前的版本.在SVN中执行此操作的方法是什么?我只想将此特定文件降级为旧版本,而不是整个仓库.

谢谢.

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial
Run Code Online (Sandbox Code Playgroud)

Eri*_*ser 180

如果您只想要工作副本中的旧文件:

svn up -r 147 myfile.py
Run Code Online (Sandbox Code Playgroud)

如果要回滚,请参阅" 如何在subversion中返回旧版本的代码? ".

  • 这可能实际上并不是问题者想要的.使用它,工作副本是干净的,不能按原样提交,并且没有指定版本号的"svn update"将检索最新的不需要的版本. (13认同)
  • 但下次更新时会得到你不想要的文件......:S (7认同)
  • 这不太正确,因为正如 CXJ 所提到的,没有办法提交更新的文件。您可能想要按照 Mitch Dempsey 所说的去做(但是请注意,强制覆盖文件的 --force): svn export --force -r 147 myfile.py myfile.py (3认同)
  • 如果你不想要它,svn提交该文件,将你想要的版本放入repo (2认同)

小智 70

svn cat也需要修改arg!

svn cat -r 175 mydir/myfile > mydir/myfile

  • **这是目前该页面上的最佳答案.**它将更改的文件保留在可以提交的状态. (17认同)

the*_*tar 57

svn revert filename 
Run Code Online (Sandbox Code Playgroud)

这应该还原一个文件.

  • 这还原到哪个版本?Doc说只需要替换最新的回购.问题是如何恢复到早期版本. (13认同)
  • 我相信所有这一切都是通过"恢复"它来摧毁你的工作副本.或者曾经检查过的.通过执行svn update -r VER文件确认,然后执行svn revert. (5认同)
  • 使用更长命令的所有其他答案有什么用?谢谢. (4认同)

Mit*_*sey 50

对于单个文件,您可以执行以下操作:

svn export -r <REV> svn://host/path/to/file/on/repos file.ext

你可以这样做,svn revert <file>但这只会恢复最后一份工作副本.

  • 导出,然后将其粘贴到本地副本,然后再次提交? (2认同)

Mic*_*ler 19

到目前为止,这里的所有答案似乎都有明显的缺点,很复杂(需要找到repo URI)或者他们没有做可能要求的问题:如何使用旧版本的旧版本再次使Repo处于工作状态档案.

svn merge -r head:[revision-number-to-revert-to] [file-path]IMO是最干净,最简单的方法.请注意,恢复已删除的文件似乎不会以这种方式工作[1].另请参阅以下问题:更好地恢复到文件的先前SVN修订版?

[1]您想要的svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn up,请参阅从SVN恢复已删除文件的正确方法是什么?


khm*_*ise 13

最好的方法是:

svn merge -c -RevisionToUndo ^/trunk
Run Code Online (Sandbox Code Playgroud)

这将撤消修订的所有文件,而不是简单地还原那些您不想撤消的文件.不要忘记破折号(-)作为修订的前缀.

svn revert File1 File2
Run Code Online (Sandbox Code Playgroud)

现在提交更改.


Kal*_*oni 8

惊讶没有人提到这一点

没有找到修订号,你可以写这个,如果你只是提交了一些你想恢复的东西,如果你更改了其他文件并且目标文件不是最后更改的文件,这将不起作用

svn merge -r HEAD:PREV file
Run Code Online (Sandbox Code Playgroud)

  • 该命令应该是@Nick Russo所说的`svn merge -r HEAD:PREV file` (4认同)

Jos*_*oco 7

我发现通过svn cat命令执行此操作非常简单,因此您甚至不必指定修订版.

svn cat mydir/myfile > mydir/myfile
Run Code Online (Sandbox Code Playgroud)

这可能不会影响时间戳等inode(元数据)数据.

  • 这对我来说比更新更有用.因为update不允许您提交对该文件所做的修改.(svn 1.8.3) (3认同)

Jen*_*yse 7

你想做

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

一旦这样做,您将使该文件的修订版处于可提交状态.提交文件.


bja*_*d_e 5

如果只有几个文件,并且您使用的是 Tortoise SVN,则可以使用以下方法:

  1. 右键单击您的源文件,然后选择“TortoiseSVN”->“显示日志”。
  2. 右键单击日志中的修订,然后选择“将修订保存到...”。
  3. 让旧版本覆盖您当前的文件。
  4. 提交被覆盖的源文件。