最近刚接触Git,下面对一些基本的使用做一下总结.

本文是转载于CSDN:http://blog.csdn.net/rryqsh/article/details/8230560

几乎所有的版本控制工具都有branch功能,branch主要用于以下几个场景:

1,控制产品OEM。

基本上做产品,不同的客户都会提出多种不同特性需求,最简单的例子就是LOGO和标题完全不一样。但是可能产品自身的大部分功能和模块的代码一样的,这个时候如何管理多个客户定制的功能特性,并且不会干扰其他OEM版本的功能呢?

如果你一开始就用if加N多变量定义的话,早晚会累死你,如果你把代码拷贝很多份,每多一个新的OEM就多拷贝一份代码,那如果发现公用模块里面有个BUG,难道你要每个版本的源代码都要修改?万一改错地方了,或者哪个版本的忘记改了,又是一件麻烦事。

这个时候我们就可以考虑使用branch功能,在第一个OEM的基础上分支出第二个OEM,第三个OEM完全取决于和哪个版本更像,就在那个版本的基础上做新的分支,有新的OEM特性需求,就切换到那个分支上修改,放心,所有的的单独分支上的代码看起来都是独立的,不会影响其他版本。

2,多人协作长时间开发功能模块

如果你在一个团队中,那几乎很难做到每天都能按期完成某个模块功能,并且测试通过。那团队成员又必须每日下班前把自己的代码保存一下,万一机器故障了之类的还能有代码备份机制。如果提交了不能工作的代码,别人又获取到了,那其他人的事情就做不下去了。所以,branch另外一个适用场景就是为team单独成员开辟个人工作区域,单元测试无误之后再把成员的工作代码合并到主分支中,既能达到个人代码备份的目的,又能不影响其他人的工作。

其实上面所说的就是rebase和merge的不同适用场景。

在场景1的情况下,如果修改了某个公用代码的BUG,这个时候就应该是把所有的OEM版本分支rebase到这个修复BUG的分支上来,在rebase过程中,Git会要你手动解决代码上的冲突,你需要做的就是把修复BUG的代码放到目标分支代码里面去。rebase的结果是:所有的分支依然存在

在场景2的情况下,因为成员的代码开发工作已经完成了,也不需要再保留这个分支了,所以我们可以把这个成员分支merge到主分支上,当然冲突在所难免,手工解决的工作肯定逃不掉,但是利大于弊不是吗。merge以后,分支就不存在了,但是在Git的所有分支历史中还能看到身影。

根据适用场景不同,采用不同的分支合并策略,让你团队的代码保持生命力吧。

rebase(各中OEM版本的分支):把所有的分支rebase到这个已经修复BUG的分支上来.目的就是把修复好的BUG代码放到各个分支代码里面去.这个时候各个OEM版本的分支都还在.

merge(团队开发):每个人对开启一个分支有各自独立的工作区.单元测试无误之后merge到主分支上.merge之后分支就不存在了.但是可以在Git所有的分支历史中查看到.

关于Git中分支merge和rebase的适用场景及区别的更多相关文章

  1. Git中分支merge和rebase的适用场景及区别

    Git merge是用来合并两个分支的. git merge b      # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 原理 如下: 假设你现在基于远程分 ...

  2. Git知识总览(五) Git中的merge、rebase、cherry-pick以及交互式rebase

    上篇博客聊了<git分支管理之rebase 以及 cherry-pick相关操作>本篇博客我们就以Learning Git中的关卡进行展开.下方列举了LearningGit中的 merge ...

  3. git中的merge与rebase

    之前一直对git的merge与rebase很困惑,而且一般也只使用merge而不是使用rebase.今天受高人指点理清了两者的区别. 首先对于两者而言,他们的结果是一样的,差异在于合并的方式(产生的结 ...

  4. git 中的 merge 和 rebase

    示例分支:master . dev 把 dev 分支上的新内容合并到 master 上 先切换分支到master git checkout master 合并操作 git merge dev 或者 g ...

  5. 关于git中的merge和rebase

    变基-git官网说明 变基 改变提交的基于分支 和merge不同 合并显示合并记录 变基合并更新后一起提交 不显示合并记录 变基 合并的结果是一致的

  6. Git中的merge命令实现中出现问题及其解决

    Git中的merge命令实现和工作方式 2015年8月17日星期一 丹丹 git代码在合并两个分支的时候总是会出现一下的错误提示,不能正常的完成合并分支,错误提示如图所示: 但是在其他的终端是可以完成 ...

  7. git dev 分支merge到master

    code reviewer之后,需要把dev分支的代码merge到master分支.通过在azkaban的服务器上git pull,最终将代码上线. git dev 分支merge到master # ...

  8. Git分支merge和rebase的区别

    Git merge是用来合并两个分支的. git merge b # 将b分支合并到当前分支 同样 git rebase b,也是把 b分支合并到当前分支 原理 如下: 假设你现在基于远程分支&quo ...

  9. Git中的merge命令实现和工作方式

    想象一下有例如以下情形:代码库中存在两个分支,而且每一个分支都进行了改动.最后你想要将当中的一个分支合并到其它的分支中.个人博客网址 http://swinghu.github.com/ 那么要问合并 ...

随机推荐

  1. nginx log_format指令记录自定义响应头

    我们用的nginx有做过一些定制开发,为了调试方便,加了一些自定义的response header,那么如何把这个自定义头记录到日志中以便于观察呢? nginx log_format指令支持这种扩展, ...

  2. 【Spark学习】Spark 1.1.0 with CDH5.2 安装部署

    [时间]2014年11月18日 [平台]Centos 6.5 [工具]scp [软件]jdk-7u67-linux-x64.rpm spark-worker-1.1.0+cdh5.2.0+56-1.c ...

  3. [Spice-devel] usbredir for Windows Client

    Hello, I have been scouring the internet for information on how to do this. I've successfully instal ...

  4. A Tour of Go Switch with no condition

    Switch without a condition is the same as switch true. This construct can be a clean way to write lo ...

  5. UIBezierPath精讲

    前言 笔者在写本篇文章之前,也没有系统学习过贝塞尔曲线,只是曾经某一次的需求需要使用到,才临时百度看了一看而且使用最基本的功能.现在总算有时间停下来好好研究研究这个神奇而伟大的贝塞尔先生! 笔者在学习 ...

  6. Altium Designer快捷键 【worldsing笔记】

    Shift + R 切换三种布线模式 (忽略, 避开或推挤) Shift + E 触发电气格点开/关 Shift + B 建立查询 Shift + PgUp 放大到最小的递增 Shift + PgDn ...

  7. Java多线程——Semaphore信号灯

    Semaphore可以维护当前访问自身的线程个数,并提供了同步机制.使用Semaphore可以控制同时访问资源的线程个数(即允许n个任务同时访问这个资源),例如,实现一个文件允许的并发访问数. Sem ...

  8. 类型检测汇总!typeof 和 instanceof 和isArray

    , ]; alert(arr instanceof Array);//true 以上老方法判断是否是数组,存在一个问题,就是它只适用于单执行环境(窗口),如果该窗口有其他框架(比如 iframe)则会 ...

  9. 利用Chrome模拟访问移动端网页

    很多网站都通过User-Agent来判断浏览器类型,如果是3G手机,显示手机页面内容,如果是普通浏览器,显示普通网页内容. 谷歌Chrome浏览器,可以很方便地用来当3G手机模拟器.在Windows的 ...

  10. 将SCOM2007代理升级到 System Center 2012 SP1

    使用以下过程可以升级到 System Center 2012 Service Pack 1 (SP1), Operations Manager工程师.您应首先验证代理程序满足最小受支持的配置.有关详细 ...