最近在给 kubernetes 提交代码,k8s 社区要求非常严格,既要分支保持与主干的代码同步,还要一次只能有一条 commit。过程中我错误地使用了一把 git merge 和 git rebase,特此总结一下。

同样更新分支,git merge 和 rebase 到底有什么区别?让我们通过这个例子来看:

* 33facc8  (master) Commit 3
|
| * 3b36f32  (second_branch)
| |
|/
* 29af11f  Commit 2
|
* 1439f8e  Commit 1

我们在 Commit 2 创建分支 second_branch 写代码,并提交了一个 commit3b36f32,在这之后,主干有人也提交了代码 Commit 3

问题来了:如何把 Commit 3 拉到我们的分支继续开发?(你的领导或同事肯定经常让你这样干!)

这时候用 git merge master 或 git rebase master 都能将主干代码合并到 second_branch,但他们的结果却不相同,结果如下图:

图片内容源自:http://www.orbitale.io/2015/12/28/git-difference-between-merge-and-rebase.html

具体有以下区别:

git merge master git rebase master
合并 master 的记录到分支,合并之后的所有 commit 会按提交时间从新到旧排列。 当前分支的 HEAD 会移动到 master 的结尾,但会变成一个新的 commit
用 git log --graph 查看的话,会有一条丑陋的边! graph 是一条漂亮的直线。
保持了所有 commit 的连贯性。 commit 历史被修改了,3b36f32 被修改成了 a018520

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

一些实践经验:•用 merge 来把分支合并到主干(废话!)。•如果你的分支要跟别人共享,则不建议用 rebase,因为 rebase 会创建不一致的提交历史。•如果只有你个人开发推荐使用 rebase•如果你想保留完整的提交历史,推荐使用 mergemerge 保留历史 而 rebase 会重写历史。•rebase 还可以用来压缩、简化历史,通过 git rebase -i 可以在分支合并到主干前,整理自己分支的提交历史,把很多细碎的 commit 整理成一条详细的 commit。•rebase 一次只处理一个冲突,merge 则一次处理全部冲突。处理冲突 rebase 更方便,但如果有很多冲突的话,撤销一个 rebase 会比 merge 更复杂,merge 只需要撤销一次。

- END -

扫码关注公众号「网管叨bi叨」

给网管个星标,第一时间吸我的知识 

​同样更新分支,git merge 和 rebase 有什么区别?相关推荐

  1. git merge分支不合并_合并分支使用Merge还是Rebase?

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

  2. 【Git】Git 分支管理 ( 创建并切换分支 | 查看分支 git branch | 合并分支 git merge dev | 删除分支 git branch -d dev )

    文章目录 一.创建并切换分支 1.创建分支 git branch dev 2.切换分支 git checkout dev 3.创建并切换分支 git checkout -b dev 二.查看分支 gi ...

  3. Git Merge VS Rebase

    首先要明白的是 git rebase 可以用来解决和 git merge 一样的问题,两个命令都是被设计出来将一个分支的改变合并到另一个分支里,只是两者的实现方式截然不同而已. 原文链接: https ...

  4. git merge与rebase

    参考这篇文章 Git 之 merge 与 rebase 的区别  文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add  .经常有问题),然后git reba ...

  5. git merge和rebase的区别

    一直以来都以为rebase是合并冲突的一种手段,和merge一样的,有哪个都行.今天才决定把他们搞懂了.我是有多么的懒.. git merge 会生成一个新得合并节点,而rebase不会 D---E ...

  6. 程序员必备小知识: 管理代码分支(git merge)

    文章目录 引言 I 管理代码分支 1.1 分支合并到主干并打tag 1.2 更新主干代码到分支 1.3 其他必备小知识 II 常用小技能 2.1 Git用户名邮箱设置 2.2 git stash se ...

  7. Git学习--分支(branch、merge、rebase)

    分支: 你可以把他理解为指针,假设一开始master和test分别是origin下的两个分支,都指向file这个文件夹,随后A,B分别使用master和test对file进行更新,他们更新的版本我们记 ...

  8. 你什么时候使用git rebase而不是git merge?

    什么时候建议使用git rebase与git merge ? 成功改造后我还需要合并吗? #1楼 在合并/ rebase之前: A <- B <- C [master] ^\D <- ...

  9. git rebase和git merge的用法

    http://softlab.sdut.edu.cn/blog/subaochen/2016/01/git-rebase%E5%92%8Cgit-merge%E7%9A%84%E7%94%A8%E6% ...

最新文章

  1. java对比python的优势_Java相比Python3有哪些优势?
  2. 再读《精通css》06:背景图片
  3. win10打开程序响应很慢_Win10系统如何关闭全部无响应进程?
  4. mysql load data into_MySQL 之 LOAD DATA INFILE 快速导入数据
  5. mysql 创建事件_mysql怎么建立事件
  6. linux如何打开dhcp服务,怎么开启DHCP服务器啊
  7. 有哪些可以让人清醒的创业失败故事
  8. butterknife 配置了点击和绑定无效
  9. python科学计算之Pandas使用(二)
  10. 从Jira到GitHub,详解Spring Framework问题跟踪系统的迁移过程
  11. 使用 Shell (命令备忘)
  12. Java爬虫,数据采集经验分享
  13. 第六次全国人口普查数据分析
  14. 【通信原理 入坑之路】 —— 深入理解BPSK调制和解调的全过程及其Matlab实现
  15. python 蒙特卡洛模拟股价_利用python进行蒙特卡罗模拟
  16. 推贴B2B/B2C订货商城系统 V3.0版
  17. informatic对表的增量抽取机制
  18. 三阶行列式简便算法_三阶行列式计算方法
  19. 软件验证码显示服务器连接错误,验证码总是提示错误,验证码错误的解决办法 专家详解...
  20. 2020使用html、js、正则表达式做一个前端注册表单信息验证

热门文章

  1. JAVA Swing 事件监听
  2. php 自定义 $_SERVER
  3. 14、utf8和UTF-8在使用中的区别
  4. vtigerCrm 目录结构(整理中)
  5. 一声叹息:我们内心里的那些恶毒
  6. Ubuntu中让SSH自动重连
  7. petshop4.0 详解之三(PetShop数据访问层之消息处理) [转]
  8. np.newaxis学习【转载】
  9. shell监控web服务的多种方案
  10. Linux网络——一种强制门户技术