14.Git分支-rebase有趣的例子、变基带来的问题及解决方案

1.有趣的变基例子

如下图所示,你创建了一个特性分支server,然后进行了一些提交(C3和C4),然后又从C3上创建了特性分支client,提交了C8和C9,最后你又回到了server,提交了C10。
现在你的分支提交情况如下图所示:
在这里插入图片描述
假设你希望将client中的修改合并到master,但是server分支中的修改不希望合并到master中,往往它们还需要经过测试,你可以使用git rebase --onto命令。

git rebase --onto master server client 

**这条命令会取出client分支上的与server分支上的共同祖先之后的修改(也就是C8,C9),然后将它们在master分支上重放一遍。**执行完成之后,分支情况如下图所示:
在这里插入图片描述
现在client就可以快速合并(fast forward)进master分支了。执行以下命令:

git checkout master
git merge client

结果如下:
在这里插入图片描述
在测试完成之后,合并server分支:如下命令:省掉了切换到server分支的步骤,可以直接将server分支上的提交rebase到master上

git rebase master server

结果如下:
在这里插入图片描述
同样进行快速合并server分支:

git checkout master
git merge server

现在你client和server分支上所有的提交都已经合并到了master分支中,你就可以删除这两个分支了。

git branch -d client
git branch -d server

最终提交历史的样子:
在这里插入图片描述

2.rebase带来的问题

如果你对已经推送到远程仓库的提交,进行了回滚,然后进行了变基操作,最后又强制提交到了远程仓库(git push --force)。这会给其他已经拉取了你的提交的开发者带来比较头疼的问题。
如果你执行了上述操作,记得告诉其他的协作者,使用:

git pull --rebase
等价于:
git fecth 
git rebase <被你强制推送的变基分支>

上述命令,在一个被变基然后强制推送的分支上再次执行变基。
这样基本能够解决变基带来的问题。

原文地址:https://www.cnblogs.com/wangwenhui/p/10704740.html