闲谈 git merge 与 git rebase 的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了闲谈 git merge 与 git rebase 的区别相关的知识,希望对你有一定的参考价值。

参考技术A 相信大部分使用 Git 的朋友都会遇见相同的疑问,并且也从网上搜索了不少资料。那么,为什么我还要写这篇文章呢?因为我想尝试从自己的角度解释这个问题,如果能给到大家灵光一闪的感悟,便善莫大焉啦。估计点进来的朋友也对 merge 和 rebase 有了一定了解,所以我也就不浪费篇幅再去详细介绍 merge 和 rebase,让我们直入主题吧。

现在假设我们有一个主分支 master 及一个开发分支 deve,仓库历史就像这样:

rebase 是什么情况呢?还是一个初始的仓库历史图:

rebase 操作加上 -i 选项可以更直观的看见被提取的 commit 信息。
仍然在 master 分支上 rebase deve 分支,不过这次要加上 -i 选项,即 git rebase -i deve ,然后我们可以得到这样一个文本信息框

上面对 merge 的讲述都是基于其默认操作即 --no-ff ( git merge xxx = git merge --no-ff xxx )的说明,但是 merge 还有一种常用的选项 --ff-only ,那么这两种有什么区别呢?
--no-ff 是 merge 的默认操作,三方合并并提交修改;而 --ff-only 会判断当前分支可否根据目标分支快速合并,就像下面这样

git中的merge与rebase

之前一直对git的merge与rebase很困惑,而且一般也只使用merge而不是使用rebase。今天受高人指点理清了两者的区别。

首先对于两者而言,他们的结果是一样的,差异在于合并的方式(产生的结果就在于log中看起来会让人感觉到有问题,也就是两者的commit记录会有很大差异)

 

merge的合并方式:

使用rebase的话:

 

补充点:

pull/fetch的区别:

fetch只是单纯的拉取代码。

pull的实际操作:fetch-merge。所以当远程代码有更新时,本地pull后会可能需要处理冲突。

以上是关于闲谈 git merge 与 git rebase 的区别的主要内容,如果未能解决你的问题,请参考以下文章

git中的merge与rebase

git merge与rebase的区别

git merge 与 git rebase的区别

git merge 与 git rebase的区别

git merge和rebase的区别

git merge和rebase的区别