2009-10-30 14 views
1
恢复

我正在使用Tortoise SVN。从版本

我最近检查了一堆代码(一次提交)。在3小时的会议中,他们决定放弃一堆我的代码和这个功能。我的老板想让我把Subversion放回原来的代码中,用于应用程序的这个区域。

我想说有大约3-4个文件受到影响。在最后一次提交中我已经提交了新特性变化的Meaing,我需要将这些文件恢复到它们在检查之前的状态。

所以,我并不真正了解什么Revert返回修订版本。我继续前进,在过去提交的日志中找到最新版本的这些文件,并右键单击日志中的这些文件,然后恢复为修订版本。

现在这是否完全替换我的本地副本与旧版本?如果我只想恢复最后一次检查的功能子集,我是否做得对?

因此,当我恢复到该文件的本地版本时,所有更改都会丢失?它看起来像它合并旧的和我的地方,它有更新的代码...恩,不完全是我的预期。

(是的,我从颠覆的文档中读取了它的页面,它并不是非常清楚或彻底的表达了它们在技术方式之外的意思,他们简单地将它放在顶层,并跳过实际发生的事情的基础在你的工作拷贝本地)

所以,让我们总结一下我做了什么:

  1. 我在一堆变化的检查在一个点上。
  2. collegue获得通过SVN更新
  3. 我们有一个会议上更新,老板说我们剥开这个功能
  4. 这特点是大约3-4已经提交到该修订的文件列表中的文件
  5. 我想把这些特定的文件放在他们之前的状态......一些将被恢复到版本x一些y等,因为这些文件的最后更改是在不同版本号。
  6. 所以我从日志开始。我寻找第一个文件。我们称之为somefile1.aspx。我发现该文件的最新版本是在版本X中签入的。所以我在该版本的更改集中右键单击它,并恢复回修订版
  7. 我注意到它似乎实际上将该版本的代码与我的本地副本??我想...不知道这就是我冒充的原因,因为eI不明白这一点。
  8. 我对3个文件做了同样的处理...寻找最后一次提交的文件,并在特定版本中右键单击它们,然后恢复到它们的修订版本......假设这会将我的本地版本在这种状态,以及几乎消灭,甚至我的变化也为该文件本地

但我有点摇摇晃晃,并对所有这一切感到困惑。如果我正在接近这个权利,并且如果我应该使用回复以及它实际上在封面下做了什么。我看到它做了一个合并但是什么?我只是想把这4个特定的文件放回到之前的状态..不是我刚才提到的整个提交,我在这里开始时提到的......只是与特定代码区域相关的特定文件。其余的可以留COMMITED和任何人else.strong文本下载

+0

你能更准确地解释你做了什么吗?你使用的命令行svn客户端(如果是,什么命令)或特殊的svn gui客户端?很难想象,你做了什么。 – Michael

+0

更新了帖子 – PositiveGuy

+0

请修复格式。 – liori

回答

1

您可能会感兴趣我的回答非常类似的问题,前一段时间:

How to remove 1 revision of a folder in Subversion

基本上,你最好的行动计划可能需要重新检查以前版本的代码,然后将该代码作为最新版本提交。

如果您发现它正在将旧副本与磁盘上的版本进行合并,那么解决该问题的最佳方法是删除本地副本,然后干净地检出指定的文件修订版。一旦你有了它,你可以重新提交它。

+0

我现在搞砸了,我已经对几个修订文件的修订做了一些回复?它在本地进行了某种合并,这吓倒了我。 – PositiveGuy

+0

他是不同的。他想要恢复整个版本。我只想恢复我交付的最新版本的几个文件。 – PositiveGuy

+0

如果我重新检查代码,然后我搞砸了。我不能再使用可能具有较新更改的现有工作副本。 – PositiveGuy

2

假设您想要恢复您在修订版1234中所做的更改:将1234至1234-1之间的差异合并。

在CLI这将是:svn merge -r 1234:1233 http://your-repo/ && svn ci

在TortoiseSVN中,得到一个合并对话框中,“合并范围的修改”,进入1234版本合并,然后单击“反向合并”。然后检查你是否没有发生任何冲突(其他人在1234之后做的更改),然后进行检查。然后你的HEAD修订版就没有这个代码。

我不确定你是否可以在TortoiseSVN的特定文件上做到这一点。我在CLI中这样做,你也可以尝试(CLI工具,TortoiseSVN,AnkhSVN,他们都共享元数据)。

SVN仍然会记得您已经编写了这段代码,而这正是它的设计目的。如果没有真正的理由从SVN中删除这些代码(如合法或勒索等),请保留它。

+0

我刚刚显示了日志,然后在我的最新修订版本中,右键单击这些文件,并从此修订版本恢复更改。我想它看起来像它取代了该文件的最后签入版本......或似乎 – PositiveGuy

+0

哦,我用zsh作为我的外壳;如果您使用cmd.exe,则可能需要将该CLI行中的&更改为不同的内容... – liori

2

coffeeaddict —

revertupdate在这里既误导性的字词。你没有做这些。您正在“反向合并”更改。

您可以将反向合并视为做相反的更改...因此,如果修订向文件添加了一行,反向合并该更改将从文件中删除该行。

在TortoiseSVN的,你做的方式是:

  1. 开始使用更新的工作副本
  2. 拉起日志
  3. 单击包含要回滚
  4. 变化的修订
  5. 右键单击要回滚的文件并选择“还原此修订版本中的更改”
  6. 对每个要回滚的文件重复步骤4
  7. 您将看到这导致您的工作副本中的这些文件的本地修改。这是你想要的;就好像您通过手动编辑文件来解除更改一样。 但是,您不会因在回滚之后发生的修订而丢失任何更改。
  8. 解决出现
  9. 提交

现在已经撤消只发生在一个修订版本的更改,而从那时起,你要保持扔掉任何更改任何冲突。