1. 程式人生 > 實用技巧 >git rebase和git merge的區別

git rebase和git merge的區別

前言:

平時工作中發現一般同事在同步遠端程式碼的時候都是用git pull,其實git pull包含有兩個操作,一個是fetch遠端的程式碼,一個是將本地當前的程式碼和遠端程式碼進行merge,即git fetch + git merge. 其實git pull還有一個引數可以加,即git pull -rebase,其最終效果和git pull一樣,也會fetch到遠端程式碼。 即git pull預設使用的是merge模式,那麼git pull -rebase指定使用rebase模式。 那麼git merge和git rebase的區別是什麼呢? 1、結果上沒有區別 簡單來說,git merge和git rebase從最終效果來看沒有任何區別,都是將不同分支的程式碼融合在一起。
2、生成的程式碼樹不同 雖然從最終效果上來說相同,但是git merge和git rebase生成的程式碼樹稍微有些不同。 3. git merge會生成一個新的合併點,而git rebase不會。 比如:當前存在兩個分支,master和test分支 D---E test / A---B---C---F master 如果使用merge合併,將為分支合併自動識別出最佳的同源合併點:並新增合併點G D--------E /\ A---B---C---F----Gtest, master
如果使用rebase合併,則合併結果為: A---B---D---E---C'---F'test, master
即git rebase可以線性的看到每次提交,而git merge可以更加精確的看到每次提交。 所以想要更好的提交樹,使用rebase操作會更好一點。這樣可以線性的看到每一次提交,並且沒有增加提交節點。 4. 遇到衝突時的處理 merge 操作遇到衝突的時候,當前merge不能繼續進行下去。手動修改衝突內容後,add 修改,commit 就可以繼續往下操作,而rebase 操作的話,會中斷rebase,同時會提示去解決衝突。解決衝突後,將修改add後執行git rebase —continue繼續操作,或者git rebase —skip忽略衝突。