1. 程式人生 > 其它 >git pull 和 git fetch的區別?

git pull 和 git fetch的區別?

pull 根據不同的配置,可等於 fetch + merge 或 fetch + rebase。具體瞭解可繼續讀下去。

要理解它們的區別,首先我們需要明白的git的架構,它是分散式的版本管理系統。我畫了張圖,不僅僅涉及到git fetch和git pull,對整體理解也會很有幫助。如下:

上圖展示了git的整體架構,以及和各部分相關的主要命令。先說明下其中涉及的各部分。

工作區(working directory),簡言之就是你工作的區域。對於git而言,就是的本地工作目錄。工作區的內容會包含提交到暫存區和版本庫(當前提交點)的內容,同時也包含自己的修改內容。

暫存區(stage area, 又稱為索引區index),是git中一個非常重要的概念。是我們把修改提交版本庫前的一個過渡階段。檢視GIT自帶幫助手冊的時候,通常以index來表示暫存區。在工作目錄下有一個.git的目錄,裡面有個index檔案,儲存著關於暫存區的內容。git add命令將工作區內容新增到暫存區。

本地倉庫(local repository),版本控制系統的倉庫,存在於本地。當執行git commit命令後,會將暫存區內容提交到倉庫之中。在工作區下面有.git的目錄,這個目錄下的內容不屬於工作區,裡面便是倉庫的資料資訊,暫存區相關內容也在其中。這裡也可以使用merge或rebase將遠端倉庫副本合併到本地倉庫。圖中的只有merge,注意這裡也可以使用rebase。

遠端版本庫(remote repository),與本地倉庫概念基本一致,不同之處在於一個存在遠端,可用於遠端協作,一個卻是存在於本地。通過push/pull可實現本地與遠端的互動;

遠端倉庫副本,可以理解為存在於本地的遠端倉庫快取。如需更新,可通過git fetch/pull命令獲取遠端倉庫內容。使用fech獲取時,並未合併到本地倉庫,此時可使用git merge實現遠端倉庫副本與本地倉庫的合併。git pull 根據配置的不同,可為git fetch + git merge 或 git fetch + git rebase。rebase和merge的區別可以自己去網上找些資料瞭解下。

看到這裡,不僅清楚了 git fetch 與 git pull。而且我們使用每個命令時,也能清楚的明白此時git做了什麼工作。