(轉載)git pull origin master與git pull --rebase origin master的區別

lijinshanba發表於2020-07-29

請移步原文

https://www.jianshu.com/p/dc367c8dca8e

 

1.git pull

 

git pull = git fetch + git merge FETCH_HEAD 

git pull --rebase =  git fetch + git rebase FETCH_HEAD 

git fetch : 從遠端分支拉取程式碼,可以得到遠端分支上最新的程式碼。

所以git pull origin master與git pull --rebase origin master的區別主要是在遠端與原生程式碼的合併上面了。

 

2.merge 和 rebase

現在我們有這樣的兩個分支,test(本地)和master(遠端),假設遠端的master的程式碼已經更改了(在B基礎上變動:C,F),test的程式碼更改了要提交程式碼(在B基礎上變動:D,E)

提交如下:

       D---E test
      /
 A---B---C---F--- master

在master執行git merge test,然後會得到如下結果:

       D--------E
      /          \
 A---B---C---F----G---   test, master

在master執行git rebase test,然後得到如下結果:

 

A---B---D---E---C‘---F‘---   test, master

merge操作會生成一個新的節點,之前的提交分開顯示。
而rebase操作不會生成新的節點,是將兩個分支融合成一個線性的提交。

3.rebase好處

想要更好的提交樹,使用rebase操作會更好一點。
這樣可以線性的看到每一次提交,並且沒有增加提交節點。

merge 操作遇到衝突的時候,當前merge不能繼續進行下去。手動修改衝突內容後,add 修改,commit 就可以了。

而rebase 操作的話,會中斷rebase,同時會提示去解決衝突。
解決衝突後,將修改add後執行git rebase –continue繼續操作,或者git rebase –skip忽略衝突。

 

      git rebase和git merge效果一樣,原理不同,git rebase過程相比較git merge合併整合得到的結果沒有任何區別,但是通過git rebase衍合能產生一個更為整潔的提交歷史。


 

相關文章