一、git pull與git fetch區別
1、兩者的區別
兩者都是更新遠程倉庫代碼到本地。
git fetch相當於是從遠程獲取最新版本到本地,不會自動merge。
只是將遠程倉庫最新commitid記錄更新到本地remote中對應的遠程分支,而本地head不更新,仍然保持本地的commitid。
git pull相當於是從遠程獲取最新版本代碼並自動merge。
只是將遠程倉庫最新commitid記錄更新到本地remote中,同時本地head也更新到遠程拉取下來的commitid記錄。
2、兩者的使用
更新代碼一般人都推薦git fetch,之后再自行手動合並,但是麻煩,協作開發,因為代碼更新是經常性的
git pull自動合並隱藏過程細節,方便快捷,但是有沖突就麻煩了,不容易對比差異化代碼。幸運的是,日常開發中我們解決沖突一般借助於IDE提供的插件,可以很好地對比版本差異,快速解決沖突,所以個人更喜歡用git pull。
二、git merge與git rebase的區別
1、兩者的區別
兩者都是將公共分支(master)合並到當前分支(feature)。
git merge 的合並分支會讓兩個分支的每一次提交都按照提交時間(並不是push時間)排序,並且會將公共分支(master)和
當前分支(feature)的最新一次commit點合並在一起,形成一個新的commit,最終的分支樹呈現非整條線性直線的形式。
git rebase操作實際上是將當前分支(feature)的所有commit點取消,保存成一個一個的臨時patch(保存在".git/rebase"目錄中),
然后把當前分支(feature)更新到最新的原分支(master),最后把這些保存的臨時patch文件,應用到當前分支(feature)上,
並把這些patch重新生成一個個對應新的commit hash值,不會形成新的commit點,可以保持整個分支樹的完美線性。
下面的更直觀:
2、兩者的使用
git merge適合公共分支,將其他分支合並到公共分支,merge操作兩個分支最新的提交點會形成新的一個提交點,使后合並進來的commit記錄仍然保持在后邊。
git rebase適合個人分支(只自己一個人提交)。日常開發過程中,個人分支代碼需要和公共分支代碼保持一致最新,定期合並公共分支代碼到個人分支。個人分支一般是處於開發階段,只有個人提交,執行rebase操作后,從公共分支上合並別人新的commit在我們的commit之前。
公共分支:master、develop、和其他人共同使用的feature,統稱為公共分支。
個人分支:只有自己一個人開發提交代碼,不存在第二個人提交,統稱為個人分支
三、git pull與git pull --rebase區別
git pull = git fetch + git merge
git pull --rebase = git fetch + git rebase
轉自:[1]git pull與git fetch及git merge與git rebase的區別
[2]git在工作中正確的使用方式----git rebase篇