前几天我遇到了如何在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         # 对本次新增的文件,全部删除

特别说明:

以上方法,经本人反复尝试,在实际应用中存在一些未知的风险,请谨慎使用。具体的现象描述如下:

1、从SVN上克隆一个linux系统的代码仓库至本地,编译完毕,所有一切正常;
2、执行“svn revert -R *”命令,再次编译,所有一切依旧正常;
3、执行“svn revert -R *”之后接着执行“svn st | grep ‘^?’ | awk ‘{print $2}’ | xargs rm -rf”命令,再次编译,出现问题,编译生成的image文件异常(表现为内容偏大,原本是3.99M,现变为4.99M,原因未知);

上述现象可反复重现,但是原因未知,将其记录在此处,待日后若有结论再行补充。


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

也就是说,你所做的修改已经被提交到了服务器上了。这种情况下,只能用“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;

收工!

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

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

    今天遇到一个问题,就是在git工程下修改了一些代码,结果发现搞错了,需要撤销掉所有改动的内容,还原到之前的初始版本,换言之就是放弃自己在本地所做的修改.该怎么做呢?要分以下几种情况来区别对待: 一.尚 ...

  2. 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!

    玩转 IDEA 系列教程 每天进步一点,不做curd工程师与Api调用工程师 欢迎访问个人博客网站:https://www.coder-programming.cn/ IDEA2020.1版本的到来, ...

  3. [Linux] PHP程序员玩转Linux系列-自动备份与SVN

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  4. 【svn老玩家翻车了,git玩的不够6】git恢复本地误删的文件

    背景: 最近项目使用git来进行代码管理,由于之前一直使用小乌龟svn,对git还是比较陌生的.有时候修改本地代码,发现改乱了,就需要删除本地版本,恢复流上代码.按照svn的操作,只要删掉本地文件,然 ...

  5. [Linux] PHP程序员玩转Linux系列-nginx初学者引导

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  6. [Linux] PHP程序员玩转Linux系列-腾讯云硬盘扩容挂载

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  7. [Linux] PHP程序员玩转Linux系列-Linux和Windows安装nginx

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  8. [Linux] PHP程序员玩转Linux系列-升级PHP到PHP7

    1.PHP程序员玩转Linux系列-怎么安装使用CentOS 2.PHP程序员玩转Linux系列-lnmp环境的搭建 3.PHP程序员玩转Linux系列-搭建FTP代码开发环境 4.PHP程序员玩转L ...

  9. Git_学习_06_ 放弃本地修改

    一.未使用 git add 缓存代码时 git checkout -- filepathname // 放弃某个文件 git checkout . // 放弃所有文件 git checkout . 用 ...

最新文章

  1. linux tpm 测试完整记录,亲测有效。
  2. 卧槽!华为大佬整理的Linux学习笔记和资料不小心流落到了外网.……
  3. .NET简谈脚本引擎系列(一:认识脚本引擎)
  4. 进度条设置_项目功能分解4:MATLAB GUI如何设计有特色的进度条。
  5. java datarow 使用_DataRow中的链接(数据表)
  6. Apollo进阶课程 ⑧ | 高精地图的格式规范
  7. linux shell 当前用户名,在Linux中使用Whoami命令显示当前登录用户名称及替代命令的方法...
  8. xmlDocument来操作xml文档
  9. 斯坦福 AIMI 打造世界更大的开源医学数据集
  10. 4 种最令人讨厌的编程语言:Java、C++ 上榜
  11. Office组件无法正常使用的解决方法
  12. startService与bindService
  13. PackagesNotFoundError: The following packages are not available from current channels: - python=3
  14. 测试C++代码与WebBrowser HTML的互动
  15. maven创建web工程,完善目录结构时出现HttpServlet等类的找不到的bug
  16. jxls能把html转成excel吗,如何用XLSTransformer生成excel文件?jxls的使用方法
  17. IPV6IPV4网址
  18. SGX Architectural Encalve(AE)及SGX密钥
  19. 链接形式的客服代码 QQ客服代码
  20. 采用Cordic算法求解atan反正切角度

热门文章

  1. 验证码类,生成验证码
  2. html5多大场景,HTML5新标签解释及其使用场景
  3. php ftp rmdir,PHP中的ftp_rmdir()函数
  4. java double 运算精度问题_关于java中Double类型的运算精度问题
  5. 谨记2017年8月30日10:03:26
  6. Oracle索引或这类索引的分区处于不可用状态 查询
  7. 关于处理小数点位数的几个oracle函数
  8. 基于DirectShow的局域网内音视频流的多机共享
  9. DPM2012学习(九),配置DPM发送电子邮件
  10. Oracle SQL Parsing Flow Diagram(SQL 解析流程图)