Git-merge & rebase(变基)
在 Git 中整合来自不同分支的修改主要有两种方法:merge 以及 rebase。
merge:
merge有两种方法,fast-forward(快速合并)和three-way merge(三方合并)
1、快速合并:
两个branch在一条线上,合并master和feature0只需要将master指针后移
2、三方合并:
情况:
选取C2,C4,C6生成快照,形成新commit C7,当前branch指向C7
rebase:
1、git rebase --onto
例子:(想要将client合并到master,但不想合并server)
git rebase --onto 变基目标分支 变基过渡分支 变基当前分支
$ git rebase --onto master server client
快速合并master和client,如下
server完成了,想要合并到master处
git rebase --onto 变基目标分支 变基当前分支
$ git rebase master server
2、rebase –interactive
git rebase -i
或git rebase --interactive
,使用该指令可以合并提交历史,其后参数可以是某一特定提交对象ID或执行特定提交对象的指针,将输出该提交对象之后的所有提交对象(不包括该提交对象),如HEAD~
表明输出当前分支最新一次提交对象,HEAD~~
表明输出当前分支的最新的两次提交对象。HEAD~n表示输出当前分支最后n次提交
git rebase -i origin/master
:可以获取最后一次从origin远端仓库拉取(pull)或推送(push)之后的所有提交。
3、变基使用原则
永远不要对已经推到主干分支服务器或者团队其他成员的提交进行变基。
变基操作的实质是丢弃一些现有的提交,然后相应地新建一些内容一样但实际上不同的提交。如果你已经将提交推送至某个仓库,而其他人也已经从该仓库拉取提交并进行了后续工作,此时,如果你用 git rebase 命令重新整理了提交并再次推送,你的同伴因此将不得不再次将他们手头的工作与你的提交进行整合,如果接下来你还要拉取并整合他们修改过的提交,事情就会变得一团糟。