git pull、git fetch、git merge、git rebase的區別


一、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篇


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM