有没有办法从意外的"svn还原"中恢复?

Jer*_*ner 92 svn undo revert

今天早上我设法通过以下方式射击自己:

  1. 开始着手改变我的项目
  2. 对一堆文件进行了大量编辑
  3. 意识到我的方法都是错的,我需要重新开始
  4. cd到我的项目的顶层并做了一个"svn --recursive revert".将我的本地沙箱恢复到其更改前的状态.
  5. 当我意识到在我当地的沙箱中有许多其他未完成的变化时,我惊恐万分,我刚刚抹掉了所有这些变化.(上个星期五svn服务器已经关闭,所以我无法检查它们,周末我忘记了它们)

幸运的是,在这种情况下,我在星期五离开工作之前做了一个"svn diff> temp.txt",而temp.txt文件仍然在我的硬盘上,所以我能够将该文件输入"补丁"并恢复我的失去了变化.

但是对于我将来的参考(即下次我犯同样的愚蠢错误)...有没有办法告诉svn撤消"svn revert"?svn是否在任何地方保留本地/未签入差异的备份?

小智 101

有一个解决方案...转到您的回收站,您将找到已删除文件的最新版本.乌龟"扔"回收箱中的每个文件回收垃圾箱.

  • 谢谢你,你救了我!我不小心做了Revert,几乎失去了2周的工作.幸运的是,我在回收站中发现了它. (8认同)
  • 对于这个答案,如果可以,我会给你1000次投票 (4认同)
  • 顺便说一下,这也是TortoiseSVN在进行恢复时看起来很慢的原因.当回收站已满时,将文件移动到回收站是一个非常慢的操作.您可以在"常规 - 对话框1"TortoiseSVN设置中禁用此功能. (2认同)
  • @ArieLivshin,为什么你会在没有承诺的情况下工作2周?您似乎需要了解有关分支的更多信息. (2认同)

Pet*_*ker 74

不,(绝对).

如果你对Subversion说它应该还原一个文件,所有的变化都会被风吹走.

只有你的记忆可以让他们回来.

例外:您添加的新文件只会丢失"添加"状态,但文件将保留在此目录中,只有状态未知("?")

平台/软件例外:在Windows上使用TortoiseSVN,Revert首先将文件抛出到回收站,然后还原它们.您可以深入了解回收站以恢复文件.

  • *是!!!*有一种方法可以根据您的操作系统和/或IDE进行恢复 - 在您心脏病发作之前阅读下面的其他答案!! (12认同)
  • 上述补遗:版本控制仅在实际提交文件时帮助您.如果您处于杀死工作副本的位置会导致数小时的工作,那么您就不会经常提交. (10认同)
  • 这不是真的,它比简单的NO要复杂一点.使用恢复工具,或者幸运的是,文件位于回收站中. (2认同)

Vla*_*mir 31

不是特定的Subversion,但是如果你正在使用Eclipse,你可以在当地的历史中试试你的运气.

现在,更具体的Subversion:如果你不想为你做的每一个改变做一个分支,你可以在本地检查一些trunk(trunk-modif-1,trunk-modif-2 .. ).每个"修改"都在一个单独的树上完成,您只需要保留一个列表,其中哪个检出对应于哪个修改.

或者您可以在本地使用Git,但我从未尝试过.

  • 仅供参考 - 通过右键单击上下文菜单"从本地历史记录还原"访问本地历史记录. (3认同)

JPr*_*mer 13

最近这个错误没有将新的文件更改(大约10个)提交到SVN,而且由于我的愚蠢错误,它们都消失了.但是为我节省的是上下文菜单中的"恢复以前的版本"选项.Phew是一种解脱和教训.


Man*_*har 7

如果您使用的是svn命令行客户端,则无法恢复文件.

但是如果你使用TortoiseSVN作为你的svn客户端,你可以恢复它们.TortoiseSVN会自动将它们移动到您的回收站.您可以在意外还原后从那里恢复它们.

这是TortoiseSVN中的可配置选项.在恢复时,它位于设置 - >对话1 - >使用回收站下.

默认情况下会选中它,这意味着文件将被移动到回收站.如果你想(大多数你不在乎禁用它.如果你有理由,请让我也知道)


Aur*_*una 5

如果您使用的是InteliJ,那么您就是一个幸运的人.在顶部菜单上,您有一个版本控制选项,在其下面您将找到本地历史记录选项,您可以在其中找到所选文件的所有历史记录,包括您对该文件所做的所有操作(更新,提交,还原).

祝你好运,Arkde