git fetch 命令的使用
- 從遠程主機克隆
Git 的 clone 命令會為你自動將遠程主機命名為 origin,拉取它的所有數據,創建一個指向它的 master 分支的指針,並且在本地將其命名為 origin/master。同時Git 也會給你一個與 origin 的master 分支在指向同一個地方的本地 master 分支,這樣你就有工作的基礎。
- 本地有提交,遠程也有別人的推送
遠程庫有人推送,提交了C0和C1:
本地提交了D0和D1:
只要你不與 origin 服務器連接,你的 origin/master 指針就不會移動。
- 同步
如果要同步遠程庫到你的工作,運行 git fetch origin 命令。
$ git fetch origin
這個命令查找 “origin” 是哪一個服務器,從中抓取本地沒有的數據,並且更新本地數據庫,移動 origin/master 指針指向新的、更新后的位置。
要特別注意的一點是 fetch 抓取到新的遠程跟蹤分支時,本地的工作區(workspace)不會自動生成一份可編輯的副本,抓取結果是直接送到版本庫(Repository)中。如下圖:
打個比方,在遠程庫 origin 新建了一個分支 dev,git fetch 后本地不會生成一個新的分支 dev(可用 git branch 查看),只有一個不可以修改的 origin/dev 指針。
- 在 origin/master 后繼續工作
如果想要在 origin/master 分支上工作,可以新建分支 test 並將其建立在遠程跟蹤分支之上:
$ git checkout -b test origin/master
這會給你新建一個用於工作的本地分支 test,並且起點位於 origin/master。
- 合並
如果想把拉取的結果合並到本地分支,需要手動合並。使用如下命令:
$ git chekout master
$ git merge origin/master
然而,看到上面的合並結果會想到命令 git pull 。在大多數情況下它的含義是一個 git fetch 緊接着一個 git merge 命令。即 git pull 是 git fetch 和 git merge 的兩步的和。
但是由於 git pull 的使用經常令人困惑,所以通常單獨顯式地使用 fetch 與 merge 命令會更好一些。