阅读原文:合并分支使用Merge还是Rebase?

作为一个有追求的开发者,我一定会选择更好的版本管理工具(Git), 使用中我们难免会在 Merge 和 Rebase 中选择其一用于合并分支。

Rebase 和 merge 都是被设计用于集成你所做的改变从一个分支到另一个分支,只是通过不同的方式。虽然目的相同,但不同的方式有不同的优缺点。

区别

例如:我们有下面的几个commit,merge会将一些commit的组合作为一个结果,而rebase会将所有commit添加到目标分支的最近一次提交之后。

通过上图我们可以看到,merge 会存在合并的历史记录,而rebase没有了历史记录且成一条直线。

Merge

  • 简单易理解
  • 源分支和目标分支相互分离
  • 保留功能分支的提交历史和分支图形
  • 分支一旦较多显示比较混乱

Rebase

  • 简化复杂的记录且线性可读
  • 没有合并的记录
  • 多个commit冲突时必须一个个提交去修改
  • 对远程分支rebase需要force push

什么时候使用rebase?什么时候使用merge ?

  • 独立开发
    如果你不是团队合作开发,那么你可以优先选择使用rebase来保持你整洁的提交历史。
  • 准备code review
    你需要在合并的时候有人来给你review,此时你需要提交一个 merge/pull request,此时别人可review你的代码后会执行merge,这将保存你此次的请求合并的记录,已备将来追溯。
  • 合并到多个目标分支或其他人正在使用当前分支
    这是应该使用merge,因为你执行rebase时,当前分支原先的commit会被删除(会影响他人),形成新的commit连接在目标分支最新commit之后。所以在这个条件不成立的时候你可以使用rebase来合并分支。

推荐

在不符合上面第三点时(合并到多个目标分支或其他人正在使用当前分支),个人分支(feature/bugfix/……)中使用rebase来更新主分支(个人分支的来源)上的变动,确保当前分支是最新的,然后提交merge/pull request,由其他人来负责对你的代码进行review并确定是否通过请求,这样可以看到每个人开发合并的历史记录。

不知道你是如何的呢?

往期文章一览

  1. 把「策略模式」应用到实际项目中
  2. 造个轮子,我学到了什么
  3. 技术面试中的软技能
  4. 不同时重写equals和hashCode又怎样!

关注微信公众号 「码上实战」 回复 :面试视频 和 架构师 送你非常不错的资料。

git merge分支不合并_合并分支使用Merge还是Rebase?相关推荐

  1. java任务分支和合并_合并/分支战略

    我会给出与Adarsh Shah相同的建议,因为在大多数情况下,2个分支(MAIN,RELEASE)就足够了,并且使用feature branches用于你不想立即提交到MAIN的东西,因为它需要一段 ...

  2. c#如何将多个json合并_合并两个c#对象(json)列表作为父级子级

    我有一个看起来像下面的json字符串: [ { "id": 1, "title": "Hello" }, { "id": ...

  3. php表格合并_合并表格怎么合并

    合并表格的方法:首先打开其中一个表格:然后点击"数据"并选择"来自XML数据导入":接着找到第二个表格打开,并点击第一个表格"Sheet1" ...

  4. 帆软相同列合并_合并报表软件有哪些深受欢迎

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  5. 帆软相同列合并_合并表格工具_合并表格工具的痛点_合并表格工具哪一款比较好用-帆软...

    在制作数据表格的时候,经常需要将一些表格合并.使用普通的办公软件合并表格是比较麻烦的.不过,现在市面上有不少合并表格工具,到底哪一款比较好用呢? 1.合并表格工具的痛点有哪些? 在制作数据表格的时候, ...

  6. java线性表合并_合并两个线性表

    严蔚敏版数据结构,算法2.1#include using namespace std; typedef int element; #define maxsize 100 typedef struct ...

  7. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

  8. git 分支合并_教你玩转Git-分支合并

    一旦某分支有了独立内容,你终究会希望将它合并回到你的主分支. 你可以使用以下命令将任何分支合并到当前分支中去: git merge$ git branch* master newtest$ lsREA ...

  9. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

最新文章

  1. 下一代汽车的核心竞争力到底是什么?
  2. GRUB基本使用介绍
  3. python数据输出_python数据输出
  4. pyflink的local模式实验记录
  5. 【模拟】表达式求值(jzoj 1768)
  6. 虚拟鼠标代替安卓触屏_美术学院18级虚拟空间设计专业数字图像程序基础课程优秀结课成果展示优秀学生王雨禾作品展示...
  7. antd table排序会触发到分页怎么解决_多年管理系统开发经验总结~代码解决方案...
  8. Python的元组被设计成不可变的影响
  9. Socket编程Http下载的简单实现
  10. oracle删除列的限制,深入理解Oracle索引(10):索引列字符类型统计信息的32位限制...
  11. python语言检测模块langid、langdetect使用
  12. 软件工程 超市库存管理系统 设计报告
  13. 【FFMPEG】I,P,B帧和PTS,DTS时间戳的关系
  14. 微信公众平台消息管理与群发图文教程
  15. (B站必备)使用BiliBiliTool,全自动完成B 站任务神器!!!
  16. linux手机E680的几个概念
  17. 台积电股价突破万亿大关 创下台股历史新高
  18. vue点击按钮打开新页签,并传参
  19. win10更新后,多了个500M的磁盘;
  20. mysql数据库:Xtrabackup安装以及应用

热门文章

  1. serlvert jsp mysql_JSP课设之项目管理 - osc_xm8bu282的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 在java中班级的表示方法_Java基础班学习笔记(8)
  3. 使用Spring Boot Actuator 监控程序运行状态
  4. centos/Linux 解决使用sudo命令时xxx is not in the sudoers file.This incident will be reported
  5. Mac 终端连接linux程服务器并相互传输文件
  6. 计算机网络ppt_大学四年,我这样学操作系统和计算机网络,毕业后成为了别人眼中的大神(附书籍推荐)
  7. java dao层的泛型get方法_dao层的泛型实现(2种方法)
  8. VUE项目中使用this.$forceUpdate()强制页面重新渲染
  9. 顺利通过EMC实验(9)
  10. Android编程知识点3-Intent