同样更新分支,git merge 和 rebase 有什么区别?
最近在给 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
写代码,并提交了一个 commit
: 3b36f32
,在这之后,主干有人也提交了代码 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
•如果你想保留完整的提交历史,推荐使用 merge
,merge
保留历史 而 rebase
会重写历史。•rebase
还可以用来压缩、简化历史,通过 git rebase -i
可以在分支合并到主干前,整理自己分支的提交历史,把很多细碎的 commit
整理成一条详细的 commit
。•rebase
一次只处理一个冲突,merge
则一次处理全部冲突。处理冲突 rebase
更方便,但如果有很多冲突的话,撤销一个 rebase
会比 merge
更复杂,merge
只需要撤销一次。
- END -
扫码关注公众号「网管叨bi叨」
给网管个星标,第一时间吸我的知识
同样更新分支,git merge 和 rebase 有什么区别?相关推荐
- git merge分支不合并_合并分支使用Merge还是Rebase?
阅读原文:合并分支使用Merge还是Rebase? 作为一个有追求的开发者,我一定会选择更好的版本管理工具(Git), 使用中我们难免会在 Merge 和 Rebase 中选择其一用于合并分支. Re ...
- 【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 ...
- Git Merge VS Rebase
首先要明白的是 git rebase 可以用来解决和 git merge 一样的问题,两个命令都是被设计出来将一个分支的改变合并到另一个分支里,只是两者的实现方式截然不同而已. 原文链接: https ...
- git merge与rebase
参考这篇文章 Git 之 merge 与 rebase 的区别 文章2 另外,使 rebase出现冲突后,先修改冲突,然后git add 某文件(我使用add .经常有问题),然后git reba ...
- git merge和rebase的区别
一直以来都以为rebase是合并冲突的一种手段,和merge一样的,有哪个都行.今天才决定把他们搞懂了.我是有多么的懒.. git merge 会生成一个新得合并节点,而rebase不会 D---E ...
- 程序员必备小知识: 管理代码分支(git merge)
文章目录 引言 I 管理代码分支 1.1 分支合并到主干并打tag 1.2 更新主干代码到分支 1.3 其他必备小知识 II 常用小技能 2.1 Git用户名邮箱设置 2.2 git stash se ...
- Git学习--分支(branch、merge、rebase)
分支: 你可以把他理解为指针,假设一开始master和test分别是origin下的两个分支,都指向file这个文件夹,随后A,B分别使用master和test对file进行更新,他们更新的版本我们记 ...
- 你什么时候使用git rebase而不是git merge?
什么时候建议使用git rebase与git merge ? 成功改造后我还需要合并吗? #1楼 在合并/ rebase之前: A <- B <- C [master] ^\D <- ...
- 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% ...
最新文章
- java对比python的优势_Java相比Python3有哪些优势?
- 再读《精通css》06:背景图片
- win10打开程序响应很慢_Win10系统如何关闭全部无响应进程?
- mysql load data into_MySQL 之 LOAD DATA INFILE 快速导入数据
- mysql 创建事件_mysql怎么建立事件
- linux如何打开dhcp服务,怎么开启DHCP服务器啊
- 有哪些可以让人清醒的创业失败故事
- butterknife 配置了点击和绑定无效
- python科学计算之Pandas使用(二)
- 从Jira到GitHub,详解Spring Framework问题跟踪系统的迁移过程
- 使用 Shell (命令备忘)
- Java爬虫,数据采集经验分享
- 第六次全国人口普查数据分析
- 【通信原理 入坑之路】 —— 深入理解BPSK调制和解调的全过程及其Matlab实现
- python 蒙特卡洛模拟股价_利用python进行蒙特卡罗模拟
- 推贴B2B/B2C订货商城系统 V3.0版
- informatic对表的增量抽取机制
- 三阶行列式简便算法_三阶行列式计算方法
- 软件验证码显示服务器连接错误,验证码总是提示错误,验证码错误的解决办法 专家详解...
- 2020使用html、js、正则表达式做一个前端注册表单信息验证