将SVN仓库中的文件还原,但保留本地版本。

7

我不小心提交了一些不完整的更改到代码库中。我不想丢失我的本地更改,但是我想将代码库中的文件还原到我提交更改之前的状态。

5个回答

9

不确定是否有这样的功能。但我会这样做:

  1. 将文件复制到一个单独的目录中[比如桌面]。
  2. 在您的SVN目录中,将该特定文件恢复到上一个版本。
  3. 提交该版本以使其成为HEAD版本。
  4. 从桌面获取您的文件并将其复制回来,覆盖它并不要检查它。

2
如果更改影响到多个文件,那么这完全是不切实际的。 - Konrad Rudolph
Konrad的解决方案更好,因为它使用基本的svn命令而不是拼凑出一个解决方案。 - Michael Skarn

2

唯一的选择是备份您的更改,然后在服务器上执行反向合并,然后将您的更改复制回您的工作副本。


1

除了编辑上游存储库的历史记录(这是可以做的,但在这种情况下不应该这样做),以下是实现此目的最简单的方法:

  1. 在本地撤消更改
  2. 提交撤消的更改
  3. 在本地重做更改

假设意外提交为$REV(您可以使用svnversionsvn log找出)。 然后执行以下操作:

svn merge -c -$REV .
svn ci -m "Revert r$REV"

上一个命令的最后一行会给出新的版本号:
Committed revision $NEW_REV.
使用下面的内容在本地恢复您的更改:
svn up # Necessary if your repository has mixed revisions (e.g. due to externals).
svn merge -c $NEW_REV .

通常情况下,$NEW_REV 简单地等于 $REV + 1。

完成。


这应该是被接受的答案,因为它利用了svn的强大功能而不是拼凑一个解决方案。 - Michael Skarn

0
我建议将您提交的特定文件保存到外部文件夹中。然后还原存储库中的文件并提交。从而导致提交之前的状态。然后取出您保存的文件并替换它们,以便您的副本具有本地更改。

0

在SVN中使用“switch”命令。这很容易,是值得知道的技巧。

  1. 如果这是您第一次使用,请将整个目录复制到安全位置,或使用WinZip(使用保留目录结构选项)。
  2. 在您的私有分支中(您肯定有一个私有分支,对吧?如果没有,请创建一个),使用存储库浏览器复制所需的分支。
  3. 在您的PC上执行“switch”操作(在TortoiseSVN中称为“switch”),将本地文件夹指向私有分支。
  4. 检查它。
  5. 切换回原始分支。
  6. 还原。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接