我正在使用 Tortoise SVN。
我最近检查过一堆代码(一次提交)。在3个小时的会议中,他们决定废弃一堆我的代码和该功能。我的老板希望我使用应用程序该区域的旧代码将Subversion重新安装到位。
我说有大约3-4个文件受到影响。在我提交新功能的最后一次提交中,我需要将这些文件回滚到我们检查它们之前的状态。
所以,我并不真正了解Revert Back to Revision的功能。我继续在日志中找到过去提交中这些文件的最新版本,并在日志中右键单击这些文件,然后恢复到修订版。
现在用旧版本完全替换我的本地副本吗?如果我只想转回我最后检查的功能的一部分,我是否正确地做到了这一点?
一旦我恢复该文件的本地版本,我是否会丢失所有更改?看起来它将旧版本与我的本地合并,后者有更新的代码......嗯,不完全符合我的预期。
(是的,我从subversion的文档中读到了它的页面,并且它不是非常清楚或彻底地说明了它在技术方面的意义,它们简单地说它处于最顶层并且跳过本地实际发生的事情的基础在你的工作副本中)
所以我们总结一下我做了什么:
但是我对这一切感到有些不安和困惑。如果我正在接近这个权利,如果我应该使用还原,那么它实际上是在做什么。我看到它完成了合并但是什么?我只是想将这4个特定文件放回到以前的状态。不是我刚刚提交的那个完整的提交,我在这里开始提到...只是特定的文件与特定的代码区域相关...休息可以保持提交并被其他人下载。强烈的文字
答案 0 :(得分: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中删除此代码(例如,合法或勒索或其他),请保留它。
答案 1 :(得分:2)
coffeeaddict -
revert
和update
在这里都是误导性的用语。你这两个都没做。你正在“反向合并”变化。
您可以将反向合并视为执行相反的更改...因此,如果修订版向文件添加了一行,则反向合并该更改将从文件中删除该行。
在TortoiseSVN中,您的方式是:
现在,您只撤消了在该修订版中发生的更改,而不会丢弃您希望保留的任何更改。
答案 2 :(得分:1)
您可能会对我前一段非常相似的问题的回答感兴趣:
How to remove 1 revision of a folder in Subversion
基本上,您最好的行动计划可能是重新检查先前版本上的代码,然后将该代码作为最新版本提交。
如果您发现它正在将旧副本与磁盘上的版本合并,则解决此问题的最佳方法是删除本地副本,然后干净地检出文件的指定版本。一旦你得到它,你可以重新提交它。