建議:最好看一遍廖雪峰的git教程,看完時間差不多就兩個小時,git相關的知識寫的很清楚,看完整個人都豁然開朗,很多git的問題都想通了。
區別:
git pull=git fetch + git merge
git pull --rebase=git fetch+git rebase
git fetch : 從遠程分支拉取代碼,可以得到遠程分支上最新的代碼。
所以git pull origin master與git pull --rebase origin master的區別主要是在遠程與本地代碼的合並上面了。
現在有兩個分支:test和master,假設遠端的master的代碼已經更改了(在B基礎上變動:C,E),test的代碼更改了要提交代碼(在B基礎上變動:D,E),如下圖:
D---E test / A---B---C---F--- master
問題就來了,如果C,F和D,E的更改發生沖突,那么就需要我們合並沖突了,下面我們來看看git merge和git rebase怎么合並的
git merge:
D--------E / \ A---B---C---F----G--- test, master
git rebase
A---B---D---E---C‘---F‘--- test, master
對比可看出:git merge多出了一個新的節點G,會將遠端master的代碼和test本地的代碼在這個G節點合並,之前的提交會分開去顯示。
git --rebase會將兩個分支融合成一個線性的提交,不會形成新的節點。
rebase好處
rebase好處
想要更好的提交樹,使用rebase操作會更好一點。
這樣可以線性的看到每一次提交,並且沒有增加提交節點。
merge 操作遇到沖突的時候,當前merge不能繼續進行下去。手動修改沖突內容后,add 修改,commit 就可以了。
而rebase 操作的話,會中斷rebase,同時會提示去解決沖突。
解決沖突后,將修改add后執行git rebase –continue繼續操作,或者git rebase –skip忽略沖突。