介紹
merge 是一種簡單方便的合并方法,但是它卻不是唯一的方法,rebase 也可以進行合并区岗。
merge 合并分支后圖形會出現一堆交叉線,合并出現沖突毁枯,不管多少次沖突都只要解一次
rebase 合并分支后圖形只會形成一條線慈缔,查看時清晰明了,合并出現沖突比較麻煩种玛,如果出現多次沖突需要一次一次去手動解決
簡單來說就是藐鹤,merge是合并其他分支的內容,rebase也是合并其他分支的內容赂韵,但rebase會把本分支的commits放在分支最頂部
相關參數
git rebase --abort 放棄合并娱节,回到rebase操作之前的狀態(tài),之前的提交的不會丟棄
git rebase --skip 會將引起沖突的commits丟棄掉右锨,一般謹慎使用
git rebase --continue 合并沖突時用,結合"git add 文件"命令一起用與修復沖突碌秸。
git rebase
使用
在項目中master作為主分支绍移,dev作為開發(fā)分支。
分支合并
此時dev分支上在正在a文件添加新功能讥电,忽然master上a文件出現一個bug蹂窖,需要緊急修復。
一般情況下我們都會先基于 master 下創(chuàng)新一個新的分支 hotfix恩敌,然后在hotfix中修復bug瞬测,后再合并到master。
合并完后,會出現一個問題月趟,就是master和dev的a文件都進行的操作會發(fā)生沖突灯蝴,這個時候要求master的分支圖必須是一條線,所以要在dev使用git rebase 進行合并孝宗。
首先在dev分支中將master分支rebase過來穷躁,使用命令
# git checkout dev
# git rebase master
如果沒有沖突的話,合并會很順利因妇,但是由于我們之前修復bug改了a文件问潭,所以會出現沖突,git會停止rebase讓你去解決沖突婚被,所以我們需要手動解決完沖突狡忙。
在rebase的時候會提示沖突,當然也可以用diff查看沖突
# git diff
這一步解決沖突就是將修復bug的代碼手動添加到當前a文件中址芯。
解決完沖突后再執(zhí)行add灾茁,提交修改
# git add a
提交完后,不執(zhí)行commit是复,執(zhí)行
# git rebase --continue
這樣git會繼續(xù)apply余下的補丁删顶。
合并多次提交
http://www.reibang.com/p/913dad94f289
總結
rebase的目的是為了讓分支圖看起來是一條連續(xù)的commit line,避免不必要的commit形成分叉淑廊,方便后續(xù)code review逗余。
在不是完全掌握rebase的情況下,多人開發(fā)的公共分支要把個人分支合并進來時季惩,推薦merge
录粱,避免造成不必要的麻煩,
另外我們在pull的時候也可以使用rebase画拾,使拉取遠程代碼到本地時的保證不會分叉啥繁,只形成一條commit line
# git pull –rebase