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

相關文章
相關標籤/搜索