假设我已经对Subversion存储库进行了一些错误的更改。然后我做出一些我想保留的好的更改。
在Eclipse中回滚这些不良更改并保留良好更改的最简单方法是什么?假定与不良更改相关的文件与与不良更改相关的文件不同。如果对相同文件进行了良好更改,而对不良文件进行了更改,那么事情将如何改变?
我主要是想通过Eclipse插件(Subclipse或Subversive)来做到这一点,但是命令行命令也很有趣。
假设我已经对Subversion存储库进行了一些错误的更改。然后我做出一些我想保留的好的更改。
在Eclipse中回滚这些不良更改并保留良好更改的最简单方法是什么?假定与不良更改相关的文件与与不良更改相关的文件不同。如果对相同文件进行了良好更改,而对不良文件进行了更改,那么事情将如何改变?
我主要是想通过Eclipse插件(Subclipse或Subversive)来做到这一点,但是命令行命令也很有趣。
Answers:
您有两种选择可以执行此操作。
快速和肮脏ctrl在Project Explorer视图中选择文件(使用),右键单击它们,选择Replace with...
,然后从Latest from Repository
或某些Branch
版本中选择最佳选项。获取这些文件后,您可以对其进行修改(使用空格或修复某些内容,然后调用并提交它们以创建更新的修订版。
一种更干净的方法是Merge
在团队菜单中选择并导航向导,该向导将帮助您恢复实际版本中的旧版本。
这两个命令都有等效的命令行:svn revert
和svn merge
。
在Eclipse Ganymede(子片段)中
选择包含重大更改的项目/文件,然后从弹出菜单中选择:
团队->显示历史
与该项目/文件相关的修订将显示在“历史记录”选项卡中。
查找提交了“重大更改”的修订,然后从弹出菜单中选择:
从修订版X还原更改
这将合并错误修订中修改的文件的更改,并在错误修订之前进行修订。
这里有两种情况:
如果您没有对该文件进行任何更改(错误修订是该文件的最新修订),它将仅删除在错误修订中进行的更改。这些更改将合并到您的工作副本中,因此您必须提交它们。
如果您对该文件进行了某些更改(错误修订不是该文件的最新修订),则必须手动解决冲突。假设您有文件readme.txt,错误的修订号是33。此外,您还对该修订版34中的文件进行了一次提交。选择“从修订版33还原更改”后,您的工作副本中将包含以下内容:
readme.txt.merge-left.r33- 不良修订
readme.txt.merge-right.r32- 错误修订之前
readme.txt.working- 工作副本版本(与r34相同,如果您没有任何未提交的更改)
原始的readme.txt将被标记为冲突,并且将包含带有某些标记(<<<<<<<。working等)的合并版本(其中删除了较差修订的更改)。如果您只想从不良修订中删除更改并在此之后保留更改,那么您要做的就是删除标记。否则,您可以将内容从上述3个文件之一复制到原始文件。无论选择什么,完成后都将冲突标记为
团队-马克解决
临时文件将被删除,您的文件将被标记为已更改。与1中一样,您必须提交更改。
请注意,这不会从svn信息库中的修订历史记录中删除修订。您只需进行新修订,即可删除不良修订中的更改。
在使用Subversive的Eclipse中:
右键单击您的项目>团队>合并
在合并窗口中,选择要照常还原的修订,但还要启用“反向合并”复选框。
正常合并。
我已经写了两个关于这个主题的博客文章。一个是Subclipse的中心的:http://markphip.blogspot.com/2007/01/how-to-undo-commit-in-subversion.html和一个是命令行中心的:HTTP://blogs.collab。 net / subversion / 2007/07 / second-chances /
svnbook的一节介绍了Subversion如何允许您从特定修订版本还原更改,而又不影响后续修订版本中发生的更改:
http://svnbook.red-bean.com/en/1.4/svn.branchmerge.commonuses.html#svn.branchmerge.commonuses.undo
我使用的Eclipse并不多,但是在TortoiseSVN中,您可以通过日志对话框中的来实现。只需右键单击要还原的修订,然后选择“还原此修订的更改”。
如果您要还原“错误的更改”的文件在后续版本中具有“良好的更改”,则过程相同。“不良”修订的更改将被还原,而“良好”修订的更改将保持不变,但是您可能会遇到冲突。