以下圖所示,你建立了一個特性分支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