2013-10-08 90 views
10

我修改了我的工作目录中的文件并做了svn更新。更新没有发生冲突。如何撤消svn更新?

我希望能够将工作目录内容恢复到svn更新之前的状态。

原因是因为我维护一个本地git仓库与共享svn仓库并行。在忘记更新svn之前,我忘了提交我的本地更改。现在我的工作目录包含与svn更新导致的更改混合的本地更改。如果我提交,所有更改将显示为一个原子更改。我希望他们会分开。如果我可以恢复更新并保存svn更新之前的工作目录的内容,我可以这样做。

+0

我解决它以另一种方式。本地更改位于不受更新影响的文件中。所以感谢git stage机制,我只提交本地修改的文件,然后在第二次提交修改svn update修改的所有其他文件。我很幸运。 – chmike

+0

是的,git阶段是出路。即使文件_were_受到影响,您仍然可以使用'svn diff'和'git apply'来拆分颠覆变化和您的更改。 –

+1

无论哪种情况,我都建议将来使用'git-svn'。它可以可靠地处理导入和导出修订,另外还可以用作本地修补程序队列(您可以在本地分支上有多个提交,并且只使用交互式转发将其中一些提交到颠覆)。 –

回答

4

这是不可能的。更新前的状态被遗忘。

你可以通过使用颠覆差异来分开变化,使用git apply将它应用于索引,承诺(你的变化),而不是承诺所有事情(从拉的变化)。

这是紧急解决方案。我建议你切换到git-svn,这将为你将来处理这种事情。

2

执行“更新到版本”,因此您将本地文件更改为稳定版本,然后重新提交。这样你就会失去所有的本地变化。

+4

放松我所有的本地变化是我想要避免的。 – chmike

+0

显然在你的情况下,如果本地更改的文件没有冲突,这个操作是无用的。所以,你很幸运! ;)祝你有个美好的一天 –

0

这是针对linux用户的。

假设修订如下。

Head - 20 以前的修订版头 - 18,17,15,14,10,9,8。

转到您的src目录。 使用 svn merge -r 17:18 $ url

$ url为您的svn基地。

6

我一直打这个问题,它实际上并没有包含“如何撤销svn更新?”的简单答案。题。

所以对于其他人的利益,与解决的情况下,你只是希望回滚一个更新:

先用检查日志:

svn log | less 

这会给你的版本号(例如957),您希望返回。然后:

svn up -r 957 
+4

这个答案忽略了修改后的工作目录。 –

+0

true @RobertPollak,但它回答了问题标题提出的问题... – ErichBSchulz

+0

Downvoting,因为它不回答原来的问题(其中的第一句包含关于修改后的文件的说明)。这将是对“如何更新到特定修订”的另一个问题的回答。如果有修改的文件,这个答案将不起作用,甚至没有提到它。 –

-1

在情况下,如果有更新的过程中发生的任何冲突,将会有你的文件和修订文件的副本在你的回收站