我在工作目录中修改了文件,然后执行了svn更新操作。更新操作没有出现冲突。
我想把工作目录的内容恢复到svn更新之前的状态。
原因是我在共享的svn仓库外还维护着一个本地的git仓库。我忘记在进行svn更新之前提交本地修改。现在我的工作目录包含了本地修改和svn更新的混合修改。如果我提交修改,所有的修改都会被视为一个原子性的变更。我希望它们能够分开。如果我能够撤销更新并且保留svn更新之前的工作目录内容,那么我就可以做到这一点。
我在工作目录中修改了文件,然后执行了svn更新操作。更新操作没有出现冲突。
我想把工作目录的内容恢复到svn更新之前的状态。
原因是我在共享的svn仓库外还维护着一个本地的git仓库。我忘记在进行svn更新之前提交本地修改。现在我的工作目录包含了本地修改和svn更新的混合修改。如果我提交修改,所有的修改都会被视为一个原子性的变更。我希望它们能够分开。如果我能够撤销更新并且保留svn更新之前的工作目录内容,那么我就可以做到这一点。
我一直碰到这个问题,但实际上它并没有提供“如何撤销svn更新?”问题的简单答案。
因此,为了让其他人受益,假设您只是想回滚更新的可解决情况:
首先,请使用以下命令检查日志:
svn log | less
这将为您提供修订版本号(例如957
),以便您可以返回。然后:
svn up -r 957
不可能的。更新之前的状态已经被遗忘了。
您可以通过创建子版本差异,使用 git apply
将其应用到索引中,提交更改,然后再提交所有内容(从拉取获取的更改)来分离更改。
这是一种紧急解决方案。我建议您切换到 git-svn
,它将在未来为您处理此类事情。
这是给Linux用户的。
假设修订如下。
Head - 20 前一个版本到head - 18、17、15、14、10、9、8。
进入您的src目录。 使用 svn merge -r 17:18 $url
$url为您的svn基础。
svn diff
和git apply
来分离子版本更改和你的更改。 - Jan Hudecgit-svn
。它可以可靠地处理导入和导出修订,并且还可以用作本地补丁队列(您可以在本地分支上有多个提交,并使用交互式变基仅将其中一些提交推送到子版本控制)。 - Jan Hudec