聊一聊 svn merge 命令。

svn 是啥就不用介绍了吧,谁用谁知道。有了 svn,开发者只要把代码提交上去,无论山崩地裂、电脑进水、硬盘格式化,哪怕换了一台电脑,都能随时把代码找回来。不过从自己工作中看到的现象来说,可能还有很多人并不了解 svn 真正的便捷之处。这里我们就聊一聊代码合并、回滚必备的利器——svn merge 命令。

一说到回滚,可能很多人立马先想到了 svn revert。其实非也,svn revert 只能把未提交的本地修改撤销,对于已经提交的代码就无能为力了。要把已经提交上去的代码回滚掉,非 svn merge 莫属。

PS:我们这里以 Linux shell 下的 svn 命令行工具为例进行介绍。Windows 图形界面版本其实原理一样,只是把命令转移到 GUI 里面去了。


在 shell 里输入 svn help merge ,可以看到大片的帮助文档,新手看了真是无从下手。不急,且看为首的几行:

merge: Apply the differences between two sources to a working copy path.usage: 1. merge sourceURL1[@N] sourceURL2[@M] [WCPATH]2. merge sourceWCPATH1@N sourceWCPATH2@M [WCPATH]3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

其实只要看明白这 4 行,svn merge 命令就搞定了。

svn merge 能干啥?

我们都知道,svn 上面保存了一份代码的所有历史版本。随着开发过程中不短提交新的代码,版本只会越来越多,而已存在的版本又无法删除。所以,如果某个版本的代码提交错了、不想要了怎么办?

这种情况,其实只要把最后一次提交里,新增的代码删掉、删掉的代码加回来、修改的代码改回去,然后 svn ci 一下就好。虽然这样好像又多了一个版本,但其实代码是回到前面一个版本的状态了。

而要把新增的代码删掉、删掉的代码加回来、修改的代码改回去,手工修改无疑太笨,也太容易出错。这就轮到 svn merge 命令出场了。

merge: Apply the differences between two sources to a working copy path.

help 文档告诉我们,merge 就是把两套代码之间的 diff 生效到本地的一个路径上。

比如上面的例子,我们假设有一套代码维护在 svn 上,一开始的版本号是 r1,后来提交了一次版本就是 r2,然后发现 r2 写错了、想撤销这次修改。这次修改做的变化就是 r1 -> r2 两个版本的 diff;那么想撤销修改,只要把 r2 -> r1 的 diff 再提交上去,虽然生成了新的版本号 r3,但其实 r3 里的代码跟 r1 是完全一样的。

svn merge 怎么用?

说了这么多虚的,那怎么操作呢?我们继续跟着 help 往下看。

1. 在同一个 URL 上做 merge

3. merge [-c M[,N...] | -r N:M ...] SOURCE[@REV] [WCPATH]

前面的例子其实是第 3 种用法,我们先看这个。假设 shell 里面当前路径就对应着 svn 上代码最上层目录,要实现上面的例子,可以直接这么写:

svn merge -r r2:r1 .

注意结尾有个“.”,表示将 diff 生效到当前路径。然后提交代码即可。

svn ci -m "rollback r2 -> r1"

2. 在不同的 URL 上做 merge

前面的例子要求远程代码 URL 跟本地代码对应的 URL 必须一致,即都在 trunk 上,或者都在同一个 branch 或者 tag 上。一般情况需要回滚代码、撤销某次修改,上面的命令足矣。而如果涉及到多个 branch 合并到 trunk 之类的问题,还需要继续往下看 :)


To be continued ...

(有时间再接着写)

转载于:https://www.cnblogs.com/jiangzhaowei/p/5671484.html

svn merge 回滚相关推荐

  1. SVN代码回滚命令之---merge的使用

    一.改动还没被提交的情况(未commit) 这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端. 其实一个命令 ...

  2. svn TortoiseSVN 回滚版本

    SVN是一个版本管理工具,在工作中经常使用,尤其是多人合作开发的时候,版本管理显得更加重要.需要使用回退的场景往往都比较"紧急",今天就记录一下在使用SVN的时候怎么回退到指定的版 ...

  3. Linux svn 版本回滚的方法

    svn log -v 显示所有日志 并带修改的文件名svn log -r ver1:ver2 显示2个版本之间的改动 svn diff -r ver1:ver2版本回滚 综上,最必要的就是3个步骤: ...

  4. SVN版本回滚——反响合并

    在使用Subversion进行团队协作工作中,往往出现这种情况.由于之前版本误提交一些数据,需要在之前某个版本的基础上进行修改 . 这是我们可以使用"反向合并" reverse m ...

  5. SVN代码回滚命令之---svn up ./ -r 版本号---OK

    一.改动还没被提交的情况(未commit) 这种情况下,见有的人的做法是删除work copy中文件,然后重新update,恩,这种做法达到了目的,但不优雅,因为这种事没必要麻烦服务端. 其实一个命令 ...

  6. SVN 撤回(回滚)提交的代码

    转: SVN 撤回(回滚)提交的代码 2016年12月20日 17:20:58 怀色 阅读数 68614 标签: svn svn回滚 版本回滚 更多 个人分类: svn 版权声明:本文为博主原创文章, ...

  7. SVN 回滚(撤回)提交的代码

    一. TortoiseSVN -> Show log 二. 注意:步骤二只是让你本地的代码回滚(撤回)到你未提交前的一个版本,并不会更新到SVN服务器上,也就是说你的同事依然能更新到你错误提交的 ...

  8. 使用GIT不小心merge后的回滚操作

    虽然有四个方法,但我们项目中使用方法一和二比较合适,不会产生新的commit,并且简单粗暴 方法一,新分支覆盖 ①首先两步保证当前工作区是干净的,并且和远程分支代码一致方法一,删除远程分支再提交 $ ...

  9. git 回滚、取消commit、取消merge等回退操作

    前言 在此之前,建立一个约定. commit会产生提交id,merge之后也会产生提交id.也就是说merge是commit的一种操作. 但是为了表达方便,我们将commit和merge统称为更新,c ...

最新文章

  1. 7-20 打印九九口诀表 (C语言)
  2. .NET Core 构建跨平台的桌面应用
  3. 1768: 回文平方数(进制转换)
  4. 【渝粤题库】陕西师范大学300011 历史文献学
  5. 机器人当中的摩擦力(未完)
  6. CodeFirst Update-Database 出现对象'DF__**__**__**' 依赖于 列'**'。
  7. 你敲键盘的声音,出卖了你 | 附开源代码
  8. 微软发布关于 Surface Pro 3 TPM 绕过漏洞的安全公告
  9. oracle库导出,oracle整库导出
  10. 前端传入JSON数组转换对象存入数据库
  11. 金蝶EAS-BOS二开详细过程
  12. iOS UILabel高度的极限值
  13. excel绘制双坐标折线图
  14. 倍福TwinCAT3 的OPC_UA通信测试案例
  15. 32位单片机 一个32位地址代表一个字节而不是4个字节(32位)
  16. Unity尝试从零创建一个敌人
  17. Flutter Text组件 文字的对齐、数字和字母对齐中文
  18. 一项“和灾难赛跑的教育”工程 ——马小平编著《人文素养读本》序
  19. 重提“不要看《深入浅出mfc》!”一文
  20. 线程同步与相互排斥:相互排斥锁

热门文章

  1. Linux进程和线程
  2. AR模型与数据平稳性之间的关系
  3. qt开发环境 - 丑陋的串口助手
  4. Pygame 整活五子棋
  5. c语言100位整数乘法,很大的数相乘怎么办?
  6. java changestr,java change
  7. 删除 索引 外键 mysql_MySQL无法删除外键约束中所需的索引
  8. 文本多标签分类python_Scikitlearn多标签分类
  9. android mdpi对应哪一个屏幕,android 常见分辨率(mdpi、hdpi 、xhdpi、xxhdpi )及屏幕适配...
  10. 聊聊Unity项目管理的那些事:Git-flow和Unity