要理解它們的區別,首先我們需要明白的git的架構,它是分布式的版本管理系統。我畫了張圖,不僅僅涉及到git fetch和git pull,對整體理解也會很有幫助。如下(知乎找的圖):
上圖展示了git的整體架構,以及和各部分相關的主要命令。先說明下其中涉及的各部分。
工作區(working directory),簡言之就是你工作的區域。對於git而言,就是的本地工作目錄。工作區的內容會包含提交到暫存區和版本庫(當前提交點)的內容,同時也包含自己的修改內容。
暫存區(stage area, 又稱為索引區index),是git中乙個非常重要的概念。是我們把修改提交版本庫前的乙個過渡階段。檢視git自帶幫助手冊的時候,通常以index來表示暫存區。在工作目錄下有乙個.git的目錄,裡面有個index檔案,儲存著關於暫存區的內容。git add命令將工作區內容新增到暫存區。
遠端版本庫(remote repository),與本地倉庫概念基本一致,不同之處在於乙個存在遠端,可用於遠端協作,乙個卻是存在於本地。通過push/pull可實現本地與遠端的互動;
遠端倉庫副本,可以理解為存在於本地的遠端倉庫快取。如需更新,可通過git fetch/pull命令獲取遠端倉庫內容。使用fech獲取時,並未合併到本地倉庫,此時可使用git merge實現遠端倉庫副本與本地倉庫的合併。git pull 根據配置的不同,可為git fetch + git merge 或 git fetch + git rebase。
做個總結:
git pull是指從遠端倉庫獲取最新版本到本地倉庫,並自動合併。
git fetch是指從遠端倉庫獲取最新版本到遠端倉庫副本區,在使用git merge可與本地倉庫合併。
看到這裡,不僅清楚了 git fetch 與 git pull。而且我們使用每個命令時,也能清楚的明白此時git做了什麼工作。
詳解git fetch與git pull的區別
git fetch和git pull都可以將遠端倉庫更新至本地那麼他們之間有何區別?想要弄清楚這個問題有有幾個概念不得不提。fetch head 是乙個版本鏈結,記錄在本地的乙個檔案中,指向著目前已經從遠端倉庫取下來的分支的末端版本。commit id 在每次本地工作完成後,都會做乙個git com...
詳細了解git fetch與git pull的區別
git fetch和git pull都可以將遠端倉庫更新至本地那麼他們之間有何區別?想要弄清楚這個問題有有幾個概念不得不提。fetch head 是乙個版本鏈結,記錄在本地的乙個檔案中,指向著目前已經從遠端倉庫取下來的分支的末端版本。commit id 在每次本地工作完成後,都會做乙個git com...
詳解git fetch與git pull的區別
git fetch和git pull都可以將遠端倉庫更新至本地那麼他們之間有何區別?想要弄清楚這個問題有有幾個概念不得不提。fetch head 是乙個版本鏈結,記錄在本地的乙個檔案中,指向著目前已經從遠端倉庫取下來的分支的末端版本。commit id 在每次本地工作完成後,都會做乙個git com...