rebase 与 merge 异同与最佳应用场景
这个 dev-cui 分支从 devlop 分支切出后, 始终都只有我一个人在开发 & 保护.
如果还有一位共事张三, 在 devlop 分支切出的分支 dev-zhangsan 上进行开发, 他增加了一个glossary.md, 而后进行了add & commit
此时我的项目开发实现, 须要将两个分支合并到 devlop 分支上:
develop分支先合并了dev-cui,(即切到 develop 分支, 执行 git merge 命令)
git merge
接着去合并dev-zhangsan, 如果应用git merge
,
绿色示意 dev-cui 分支, 紫色示意dev-zhangsan
, 每一个点代表一次提交.
可见呈现了分叉, 且 merge 操作会主动有一次 commit(此处为 快进式提交, 参看文首链接), 见下图:
gir rebase
先回退到7f8ccb37fdcced4bd4766c8192a6e27fc5f02730
,
接着切换到 dev-zhangsan 分支, 执行git rebase develop
,
此刻对于 dev-zhangsan 分支, 曾经有了 develop 分支的其余提交
而后切回 develop 分支, 执行git merge dev-zhangsan
此时的 develop 分支的提交 log 为:
git rebase
个别称为 变基 或换基 , 这篇 blog 将其称为 衍合 , 区别于git merge
的合并
其实 git rebase
后, 还是要执行一次git merge
.
即有个骨干分支 A, 有个次分支 B, 二者切分后, 都有许多次提交. 这时想再合并到一起, 且心愿 commit log 是一条直线, 那切到次分支 B 上, 执行git rebase A
, 这时就基于 A, 而后把 B 的改变 ” 拔掉 ”, 而后放到最后面.(B 的提交历史此时是一条直线)
而后须要切回骨干分支 A, 执行git merge B
, 肯定是一个 ” 快进式提交 ”. 此时对于 A, 它的 commit log 就也是一条干线了
本文由 mdnice 多平台公布