一、改动还没被提交的情况(未commit)
这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端。
其实一个命令就可以搞定:
1 |
|
PATH可以是准备回滚的文件、目录,如果想把某个目录下的所有文件包括子目录都回滚,加上-R选项。
二、改动已经提交(已commit)
1.首先取得当前最新版本,不是最新的有可能带来麻烦:
1 |
|
假设当前版本是2582.
2.找到要回滚到的版本号,如果不清楚,查看log,diff
1 2 |
|
假设回滚到版本2580.
3.merge
1 |
|
merge完使用diff确认结果
1 |
|
4.提交
1 |
|
因为又一次提交,版本号又升了一个,现在变成了2583.
见有的人是这么做回滚的,就是逐个修改代码,然后再提交,如果改动很多的话难免 有所遗漏,非常不推荐。
如果在这期间,其他人提交了很多代码,如何保留别人的劳动成果,只把自己的错误剔掉,不太容易。
SVN 回滚:
svn没有恢复旧版本的直接功能,不过可以使用svn merge命令恢复。
比如说当前HEAD为14,而我要恢复成10版本,怎么做?用svn merge:
svn update //更新工作目录
svn merge --revision 14:10 //修订版本14的内容到10
svn commit -m "restore to
revision 10" //向服务器上提交改动,生成一个最新版本,version15
merge是比较指定版本的差异,然后把这些差异应用到本地工作副本,而-r后的14:10,是指相对于版本14来说版本10的变化(注意,这个版本的次序很重要。),也就是相对版本14,我版本10添加了哪些文件或目录,以及哪些文件添加了哪些行删除了哪些行。又因为本地版本是最新的14,所以把这些差异应用到本地版本时就等于把14改变成10,其效果等于还原到版本10。然后提交,最后的版本号是15。