【问题标题】:How to undo an svn update?如何撤消 svn 更新?
【发布时间】:2023-03-05 07:36:01
【问题描述】:

我修改了工作目录中的文件并进行了 svn 更新。更新执行没有冲突。

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

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

【问题讨论】:

  • 我用另一种方式解决了它。本地更改位于不受更新影响的文件中。所以多亏了 git stage 机制,我只提交本地修改的文件,然后在第二次提交中修改了 svn update 修改的所有其他文件。我很幸运。
  • 是的,git 阶段是出路。即使文件受到影响,您仍然可以使用svn diffgit apply 来分解颠覆更改和您的更改。
  • 无论哪种情况,我都建议将来使用git-svn。它可以可靠地处理导入和导出修订,另外还可以用作本地补丁队列(您可以在本地分支上进行多次提交,并使用交互式 rebase 仅将其中的一部分推送到颠覆)。

标签: svn


【解决方案1】:

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

因此,为了他人的利益,您只想回滚更新的可解决情况:

首先检查日志:

svn log | less

这将为您提供您希望返回的修订号(例如957)。那么:

svn up -r 957

【讨论】:

  • 这个答案忽略了修改工作目录的情况。
  • true @RobertPollak 但它回答了问题标题提出的问题......
  • 投反对票,因为这没有回答原始问题(其中第一句包含有关修改文件的注释)。这将是对另一个问题“如何更新到特定修订版”的回答。如果有修改过的文件,这个答案将不起作用,甚至没有提及它。
【解决方案2】:

这是不可能的。更新前的状态忘记了。

您可以通过创建颠覆差异来分离更改,使用git apply 将其应用于索引,提交(您的更改),然后提交所有内容(来自拉取的更改)。

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

【讨论】:

  • 恕我直言,这是一个令人难以置信的缺陷! VCS 应该让您很难对存储库造成永久性损坏。
  • @JanM.,是的,是的!唉,据我所知,git 是唯一一个通过 reflog 为您提供一些保护并拒绝与未提交的更改进行非平凡合并的唯一方法。大多数其他系统会很高兴地使用合并结果破坏修改过的文件,并且在更新期间没有备份。
  • @JanM.,公平地说,这并没有真正损坏 存储库,只是弄乱了正在进行的工作。
【解决方案3】:

执行“更新到版本”,因此您将本地文件更改为稳定版本,然后重新提交。这样一来,您将丢失所有本地更改。

【讨论】:

  • 我想避免丢失所有本地更改。
  • 显然在您的情况下,如果本地更改的文件不冲突,则此操作无用。所以,你很幸运! ;) 祝你有美好的一天
【解决方案4】:

这是为 linux 用户准备的。

假设修订如下。

头 - 20 以前对头部的修订 - 18、17、15、14、10、9,8。

转到您的 src 目录。 采用 svn 合并 -r 17:18 $url

$url 用于您的 svn 基础。

【讨论】:

    【解决方案5】:

    如果在更新过程中发生任何冲突,您的回收站中将提供您的文件和修订文件的副本

    【讨论】:

      猜你喜欢
      • 2011-09-10
      • 2010-10-18
      • 2012-08-04
      • 2012-02-15
      • 2018-03-16
      • 2015-03-13
      • 2018-11-16
      • 1970-01-01
      • 2011-03-26
      相关资源
      最近更新 更多