Git中分支merge和rebase的适用场景及区别
Git merge是用来合并两个分支的。
同样 git rebase b,也是把 b分支合并到当前分支
原理 如下:
两个使用场景是不一样的,merge只是合并另外一个分支的内容,rebase也合并另外一个分支的内容,但是会把本分支的commits顶到最顶端
假设我们现在有3个分支
- master分支:线上环境使用的分支
- testing分支:测试环境使用的分支
- my_feature分支:开发新功能的分支,也就是当前分支
A. 假设我在my_feature上开发了一段时间,之后另外的同事开发的功能正式上线到master分支了,那么我可以在当前的分支下rebase一下master分支,这样我这个分支的几个commits相对于master还是处于最顶端的,也就是说rebase主要用来跟上游同步,同时把自己的修改顶到最上面
B. 我在my_feature上开发了一段时间了,想要放到testing分支上,那就切到testing,然后merge my_feature进来,因为是个测试分支,commits的顺序无所谓,也就没必要用rebase (当然你也可以用rebase)
另外,单独使用rebase,还有调整当前分支上commits的功能(合并,丢弃,修改commites msg)
PS:
其他知友的答案都说到冲突的问题,
1. 用merge确实只需要解决一遍冲突,比较简单粗暴
2. 用rebase有时候会需要多次fix冲突(原因在于本地分支已经提交了非常多的commit,而且很久都没有和上游合并过)
我个人推荐大家开发的时候,尽量及时rebase上游分支(我习惯是每周merge一次),有冲突提前就fix掉,即使我们自己的分支开发了很久(哪怕是几个月),也不会积累太多的conflict,最后合并进主分支的时候特别轻松, 非常反对从master check出新分支,自己闷头开发几个月,结果最后merge进主分支的时候,一大堆冲突,自己还嗷嗷叫的行为
最新文章
- REDHAT一总复习1 记录systemd日志条目 rsyslogd配置记录日志指令
- CAR
- WCF分布式开发必备知识(3):Web Service 使用
- iOS-SVN、Git
- C++类所占内存大小计算
- LogBack配置详解(一)
- Delphi Xe2 后的版本如何让Delphi程序启动自动“以管理员身份运行";
- ecshop增加pc扫描二维码微信支付功能代码
- pstack使用和原理
- 关于JSON的总结
- 面向对象(POP)和面向过程(OOP)
- mysql版本问题sql_mode=only_full_group_by
- 呜呼!Node.js是什么?
- php mysq模糊查询l
- CF#462 div1 D:A Creative Cutout
- c# 工具类(字符串和时间,文件)
- 【Visual C++】游戏编程学习笔记之六:多背景循环动画
- 10分钟了解JSON Web令牌(JWT)
- 程序配置的原则和实践以及 Spring Boot 支持方式
- mariadb(第一章)
热门文章
- [原]如何在Android用FFmpeg+SDL2.0之同步视频
- java里面list是引用的好例子
- UVa 1442 - Cave
- python2.7 安装Django
- 十五、详述 IntelliJ IDEA 插件的安装及使用方法
- Race UVA - 12034(dp+打表)
- ViewController里的loadView和viewDidLoad什么区别
- ubuntu server遇到的问题
- 5.同步关键字(synchronized)
- java8的新特性,Collections.sort(排序的List集合)的使用,对list封装Map里面的某个值进行排序