玩转SVN系列之【如何放弃本地/服务器端所做的修改】

版权声明:个人心得,欢迎来信来函交流。转载请注明出处! https://blog.csdn.net/LEON1741/article/details/81975122

前几天我遇到了如何在GIT下放弃本地所做的修改的问题,并写了一篇博客来整理其中的思路,详见(玩转GIT系列之【如何放弃本地/服务器端所做的修改】)。但是今天,我在SVN下遇到了同样的问题,而且是linux系统下命令行的SVN,不是windows系统下的图形界面。所以,一切还是得靠命令来解决,具体来说要分以下几种情况来区别对待:

第一种情况:放弃本地的修改内容

也就是说,你所做的修改仍然是在本地,尚未提交到服务器端。这种情况下,使用“svn revert”命令就能取消之前的修改。用法如下:

svn revert [-R] target

其中target是你需要放弃修改(即还原成服务器版本)的目录或文件。

  • 当target为单个文件时,直接“svn revert target”就行了;
  • 当target为某个目录时,需要加上参数-R(Recursive,递归),否则只会针对target根目录进行处理,而不会处理它下面的子目录。

比如:想要放弃整个工程里所有的修改内容,则可以在整个工程的根目录下执行下述命令:

svn revert -R *

注意:一旦使用了这个命令,就意味着你完全放弃本地所做的修改,这些文件的内容将会被彻底还原成服务器端的版本。而这种放弃不可撤销的,是找不回来的,这一点请注意!

特别说明:此处的revert命令,只是针对之前就已经存在的那些文件。如果你本次还新增了一些文件,则revert命令并不会将你新增的文件删除或者清空,仍需你自己手动操作。经过摸索,我找到了一个命令可以完成这个任务,也就是说,可以自动删除那些你新增的、但是尚未提交的文件。亲测可用,大家如果有需要可以拿去用:

svn st | grep '^?' | awk '{print $2}' | xargs rm -rf

划重点:

总结一下就是,如果你修改了若干文件,同时还新增了一些文件,然后突然想放弃所有的操作,将所有代码恢复原样,那么则可以采取以下命令组合:

svn revert -R *                                              # 对已经存在的文件,恢复原样
svn st | grep '^?' | awk '{print $2}' | xargs rm -rf         # 对本次新增的文件,全部删除

第二种情况:放弃服务器端的修改内容

也就是说,你所做的修改已经被提交到了服务器上了。这种情况下,只能用“svn merge”命令来进行版本回滚。回滚的操作过程如下:

1、首先保证我们拿到的是最新代码

svn update

假设最新版本号是28。

2、然后找出要回滚的确切版本号

svn log [something]

假设根据svn log日志查出要回滚的版本号是25,此处的something可以是文件、目录或整个项目。如果想要更详细的了解情况,可以使用svn diff -r 28:25 [something]。

3、回滚到版本号25

svn merge -r 28:25 something

为了保险起见,再次确认回滚的结果:

svn diff [something]

确认正确无误,方可提交。

4、提交回滚之后的内容

svn commit -m "Revert revision from r28 to r25, because of ..." 

提交后版本变成了29。

总之,将以上操作总结为三条如下:

  1. svn update,svn log,找到最新版本(latest revision);
  2. 找到自己想要回滚的版本号(rollbak revision);
  3. 用svn merge来回滚: svn merge -r : something;

收工!

猜你喜欢

转载自blog.csdn.net/LEON1741/article/details/81975122