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

1.有趣的变基例子

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

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上code

git rebase master server

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

git checkout master
git merge server

如今你client和server分支上全部的提交都已经合并到了master分支中,你就能够删除这两个分支了。blog

git branch -d client
git branch -d server

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

2.rebase带来的问题

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

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

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

相关文章
相关标签/搜索