title: Git Rebase和Merge的用法
categories: 后端
tags:
- Git

Rebase和Merge是什么?

merge和rebase的作用都是合并两个分支,其区别在于:

                     A---B---C topic
/ \
D---E---F---G---H master

在topic分支,想要引入master分支的F、G commit上的内容,可以用merge,然而merge的缺点是引入了一次不必要的合并记录

 					A--B--C--X topic
/ / \
D---E---F---G---H master

其实仔细想一下就会发现,引入master分支的F、G commit这个问题上,我们并没有要求两个分支必须进行交汇(join),我们只是想避免最终的merge conflict而已。

rebase是另一个选项。rebase的含义是改变当前分支branch out的位置。这个时候进行rebase其实意味着,将topic分支branch out的位置从E改为G,如图:

                             A---B---C topic
/
D---E---F---G master

在这个过程中会解决引入F、G导致的冲突,同时没有多余的history join。但是rebase的缺点是,改变了当前分支branch out的节点。如果这个信息对你很重要的话,那么rebase应该不是你想要的。rebase过程中也会有多次解决同一个地方的冲突的问题,不过可以用squash之类的选项解决。个人并不认为这个是rebase的主要问题。

以上部分内容来自知乎的回答: https://www.zhihu.com/question/36509119/answer/131513261

正确使用rebase的开发流程

  1. 第一天创建了一个feature分支开发自己的功能,并且进行了几次commit
C1 -- C2 -- C3 (master)
\
-- F1 -- F2 (feature)
  1. 多次commit后需要把多个commit合并(参考我之前的一篇博客:如何使用sourcetree合并多个commit
C1 -- C2 -- C3 (master)
\
-- F12 (feature)
  1. 当功能开发完成后合并到主分支时,主分支已经有其他人的commit:
C1 -- C2 -- C3 -- C4 -- C5 (master)
\
-- F12 (feature)
  1. 此时先在主分支上rebase,变成了下面这样:
C1 -- C2 -- C3 -- C4 -- C5 (master)
\
-- F12 (feature)
  1. 然后再merge到主分支:
C1 -- C2 -- C3 -- C4 -- C5 ---- C6 (master)
\ /
-- F12 (feature)

注意点:

  • 合并多个commit是为了在rebase的时候避免解决多次冲突

以上内容总结了这篇知乎回答:

  1. https://www.zhihu.com/question/36509119/answer/2006718263

部分有意义的回答

rebase的最大好处并不是消除merge,而是避免merge的交织。

简要来说,就是在merge进被合分支(如master)之前,最好将自己的分支给rebase到最新的被合分支(如master)上,然后用pull request创建merge请求。

我个人一般在pull request里面还是采用普通的merge,当然可能有的小伙伴喜欢rebase merge等,我觉得要看具体情况。

其实本文的关键就是合理利用 rebase和merge来避免git历史提交里的无意义的“交织”。

来自一个用户名的知乎回答

参考

  1. 知乎问题:在开发过程中使用 git rebase 还是 git merge,优缺点分别是什么?

  2. 知乎专栏:git merge和git rebase的区别, 切记:永远用rebase

Git Rebase和Merge的用法的更多相关文章

  1. [git]rebase和merge

    转自:http://blog.csdn.net/wh_19910525/article/details/7554489 Git merge是用来合并两个分支的. git merge b # 将b分支合 ...

  2. git rebase 与 merge 的那些事儿~(详细图解,通俗易懂)

    什么是 rebase? git rebase 你其实可以把它理解成是"重新设置基线",将你的当前分支重新设置开始点.这个时候才能知道你当前分支于你需要比较的分支之间的差异. 原理很 ...

  3. git rebase 还是 merge的使用场景最通俗的解释

    什么是 rebase? git rebase 你其实可以把它理解成是“重新设置基线”,将你的当前分支重新设置开始点.这个时候才能知道你当前分支于你需要比较的分支之间的差异. 原理很简单:rebase需 ...

  4. git rebase 与 merge(个人使用理解)

    merge 是“合并”,rebase.cherry-pick 中文能理解成“重现” merge 一般是对于整个分支做处理,比如一个feature分支,功能开发完成经过测试了,我们会合并(merge)到 ...

  5. git rebase 和 merge的区别

  6. git merge 与 git rebase

    git merge git rebase merge V.S. rebase 参考材料 写在开始: 对merge和rebase的用法总有疑惑,好像两个都能完成"获取别的branch的comm ...

  7. git合并之 merge和rebase

    合并有两种方法: git rebase 和git merge 优先用 rebase!!!! 区别: 1. 使用git merge git checkout dev git merge master 或 ...

  8. git merge 及 git rebase的区别

    Git上合并代码有git merge 及 git rebase 两种方式. 前置知识点 Master分支:首先,代码库应该有一个.且仅有一个主分支.所有提供给用户使用的正式版本,都在这个主分支上发布. ...

  9. git rebase 的使用

    rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...

  10. Git rebase的使用

    rebase 在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase. 在本节中我们将学习什么是“rebase”,怎样使用“rebase”,并将展示该操作的惊艳之处,以及指 ...

随机推荐

  1. 后端框架的学习----mybatis框架(5、分页)

    七.分页 简单使用 1.在要使用Log4j的类中,导入包import org.apache.log4j.Logger; 2.日志对象,参数为当前类的class static Logger logger ...

  2. python渗透测试入门——基础的网络编程工具

    <Python黑帽子--黑客与渗透测试编程之道学习>这本书是我在学习安全的过程中发现的在我看来十分优秀的一本书,业内也拥有很高的评价,所以在这里将自己的学习内容分享出来. 1.基础的网络编 ...

  3. 33.ModelSerializer详解

    ModelSerializer特点 根据Model模型的定义,自动生成字段 自动生成相应的验证器 实现create和update 自动默认将关系字段映射成PrimaryKeyRelatedField主 ...

  4. Git 02: git管理码云代码仓库 + IDEA集成使用git

    Git项目搭建 创建工作目录与常用指令 工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文. 日常使用只要记住下图6个命令: ...

  5. Redis系列9:Geo 类型赋能亿级地图位置计算

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  6. jQuery+bootstrap实现有省略号的数据分页

    1.前言 在前端通过ajax请求数据后,可以通过bootstrap实现分页.由于bootstrap只提供分页的按钮的样式.数据分页我们需要实现页码跳转,上一页下一页,数据过多显示省略号,点击省略号能快 ...

  7. Pycharm系列---QT配置

    PYSIDE2 添加外部工具 file---settings External Tools,点击左上角的 加号+ designer 位置: envs\QT6\Lib\site-packages\PyS ...

  8. SpringMVC&Maven进阶

    3. SpringMVC 3.1 了解SpringMVC 概述 SpringMVC技术与Servlet技术功能等同,均属于web层开发技术 学习路线 请求与响应 REST分割 SSM整合 拦截器 目标 ...

  9. 「浙江理工大学ACM入队200题系列」问题 K: 零基础学C/C++84——奇偶ASCII值判断

    本题是浙江理工大学ACM入队200题第八套中的K题 我们先来看一下这题的题面. 题面 题目描述 任意输入一个字符,判断其ASCII是否是奇数,若是,输出YES,否则,输出NO; 例如,字符A的ASCI ...

  10. 洛谷 P4135 作诗 题解

    题面. 之前做过一道很类似的题目 洛谷P4168蒲公英 ,然后看到这题很快就想到了解法,做完这题可以对比一下,真的很像. 题目要求区间内出现次数为正偶数的数字的数量. 数据范围1e5,可以分块. 我们 ...