在 Git 中整合來自不一樣分支的修改主要有兩種方法:merge 以及 rebase。git
merge有兩種方法,fast-forward(快速合併)和three-way merge(三方合併)服務器
兩個branch在一條線上,合併master和feature0只須要將master指針後移spa
狀況:3d
選取C2,C4,C6生成快照,造成新commit C7,當前branch指向C7指針
例子:(想要將client合併到master,但不想合併server)code
git rebase --onto 變基目標分支 變基過渡分支 變基當前分支server
$ git rebase --onto master server client
快速合併master和client,以下對象
server完成了,想要合併到master處blog
git rebase --onto 變基目標分支 變基當前分支three
$ git rebase master server
git rebase -i
或git rebase --interactive
,使用該指令能夠合併提交歷史,其後參數能夠是某一特定提交對象ID或執行特定提交對象的指針,將輸出該提交對象以後的全部提交對象(不包括該提交對象),如HEAD~
代表輸出當前分支最新一次提交對象,HEAD~~
代表輸出當前分支的最新的兩次提交對象。HEAD~n表示輸出當前分支最後n次提交
git rebase -i origin/master
:能夠獲取最後一次從origin遠端倉庫拉取(pull)或推送(push)以後的全部提交。
永遠不要對已經推到主幹分支服務器或者團隊其餘成員的提交進行變基。
變基操做的實質是丟棄一些現有的提交,而後相應地新建一些內容同樣但實際上不一樣的提交。若是你已經將提交推送至某個倉庫,而其餘人也已經從該倉庫拉取提交併進行了後續工做,此時,若是你用 git rebase 命令從新整理了提交併再次推送,你的同伴所以將不得再也不次將他們手頭的工做與你的提交進行整合,若是接下來你還要拉取並整合他們修改過的提交,事情就會變得一團糟。