合并分支的另一種操作git rebase,又翻譯成變基
當我們同時在master和develop上做了修改领斥,兩個分支線都往前走了
如果這個時候用merge把master分支合并到develop分支闸天,就會是No-fast-foward的合并方式在develop分支上產生一個新的提交
后續(xù)我們去review develop分支的代碼的時候惭墓,會發(fā)現以前master分支上的別人提交的commit5 commit6 和develop分支上你提交的的commit7 commit8雜糅到了一塊兒咬腕,很不方便review你寫的代碼
但是册赛,如果你想讓develop分支歷史看起來像沒有經過任何合并一樣谁不,你可以用 git rebase命令
$ git rebase master
這個命令會把你的develop分支里的每個提交(commit)都取消掉坐梯,并且把它們臨時保存為補丁(patch)徽诲,這些補丁放到了.git/rebase目錄中刹帕,然后把develop分支更新為最新的master分支,最后把保存的這些補丁應用到develop分支上谎替。
當develop分支更新之后偷溺,它會指向這些新創(chuàng)建的提交(commit),而那些老的提交會被丟棄钱贯。 如果運行垃圾收集命令(pruning garbage collection)挫掏,這些被丟棄的提交就會刪除
如果rebase過程中有沖突,就先解決沖突秩命,然后執(zhí)行git rebase --continue 繼續(xù)變基
當我們使用git log來參看commit時尉共,使用git merge和使用git rebase 的commit的順序會不相同。
假設commit5提交于9:00AM弃锐,commit7提交于10:00AM袄友,commit6提交于11:00AM,commit8提交于12:00AM
對于使用git merge來合并所看到的commit的順序(從新到舊)是:commit9霹菊,commit8剧蚣,commit6,commit7旋廷,commit5鸠按,commit4,commit3饶碘,commit2目尖,commit1
對于使用git rebase來合并所看到的commit的順序(從新到舊)是:commit8Copy,commit7Copy扎运,commit6瑟曲,commit5,commit4绪囱,commit3测蹲,commit2,commit1? 其中commit8Copy提交只是commit8提交的克隆鬼吵,commit7Copy提交只是commit7提交的克隆
我們再通過一個動畫看下rebase的過程
想要學習其他開發(fā)技術扣甲,可關注我微信公眾號: