先来看一张图

上图中从主分支 B 节点创建新 local 分支,提交两次 commit(E / F),master 提交两次commit(C / D)「 master可以理解为其余开发者合并更新主分支代码代码 」。然后我们执行先使用 merge 合并
merge 合并
git checkout master
git pull origin master
git checkout local
git merge master
> G
> # Please enter a commit message to explain why this merge is necessary,
> # especially if it merges an updated upstream into a topic branch.
> #
git checkout master
git merge local
git log

「merge」 流程图

merge 会把主分支和你新的 commit 合并形成一次新的提交「 G 」,分支排列顺序会按照 commit 时间线来排序
rebase 合并
git checkout master
git pull origin master
git checkout local
git rebase master
git checkout master
git merge local
git log

「rebase」流程图

rebase 会把你新的 commit 放到最新分支的前面,打乱了时间线,把你的分支整理成一条直线,看起来非常简洁。 同时也篡改了分支基底,就是 local 的修改不再基于 B 而是基于 D ,也修改了commit 的标识码。所以最好不要在公共分支上使用 rebase
选择
- 拉主分支代码时候用 rebase 「 简洁美观,线性干净,不需要忍受 merge 的 Merge branch ‘local’」
- 往主分支合并的时候用 merge 「 保护历史 」
完整合并流程
git clone 「**」
git checkout master
git checkout -b local
git add .
git commit -m 「功能描述」
git rebase -i HEAD~「次数」
git checkout master
git pull origin master
git checkout local
git rebase master
git add .
git rebase --continue
git checkout master
git merge local
git push origin master
|