以下图所示,你建立了一个特性分支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
最终提交历史的样子:图片
若是你对已经推送到远程仓库的提交,进行了回滚,而后进行了变基操做,最后又强制提交到了远程仓库(git push --force
)。这会给其余已经拉取了你的提交的开发者带来比较头疼的问题。
若是你执行了上述操做,记得告诉其余的协做者,使用:开发
git pull --rebase 等价于: git fecth git rebase <被你强制推送的变基分支>
上述命令,在一个被变基而后强制推送的分支上再次执行变基。
这样基本可以解决变基带来的问题。get