git fetch
命令用於從另一個儲存庫下載物件和參照。
使用語法
git fetch [<options>] [<repository> [<refspec>…]]
git fetch [<options>] <group>
git fetch --multiple [<options>] [(<repository> | <group>)…]
git fetch --all [<options>]
從一個或多個其他儲存庫中獲取分支和/或標籤(統稱為「參照」)以及完成其歷史所必需的物件。 遠端跟蹤分支已更新(Git術語叫做commit
),需要將這些更新取回本地,這時就要用到git fetch
命令。
預設情況下,還會獲取指向正在獲取的歷史記錄的任何標籤; 效果是獲取指向您感興趣的分支的標籤。可以使用--tags
或--no-tags
選項或通過組態遠端.<name>.tagOpt
來更改此預設行為。 通過使用顯式提取標籤的refspec
,可以獲取不指向您感興趣的分支的標籤。
git fetch
可以從單個命名的儲存庫或URL中獲取,也可以從多個儲存庫中獲取,如果給定了<group>
,並且組態檔案中有一個遠端<group>
條目。
獲取的參考名稱以及它們所指向的物件名稱被寫入到.git/FETCH_HEAD
中。 此資訊可能由指令碼或其他git命令使用,如git-pull
。
以下是一些範例 -
1.更新遠端跟蹤分支
$ git fetch origin
上述命令從遠端refs/heads/
名稱空間複製所有分支,並將它們儲存到原生的refs/remotes/ origin/
名稱空間中,除非使用分支.<name>.fetch
選項來指定非預設的refspec
。
2.明確使用refspec
$ git fetch origin +pu:pu maint:tmp
此更新(或根據需要建立)通過從遠端儲存庫的分支(分別)pu
和maint
提取來分支本地儲存庫中的pu
和tmp
。
即使沒有快進,pu
分支將被更新,因為它的字首是加號; tmp
不會。
3.在遠端分支上窺視,無需在本地儲存庫中組態遠端
$ git fetch git://git.kernel.org/pub/scm/git/git.git maint
$ git log FETCH_HEAD
第一個命令從 git://git.kernel.org/pub/scm/git/git.git
從儲存庫中獲取maint
分支,第二個命令使用FETCH_HEAD
來檢查具有git-log
的分支。
4.將某個遠端主機的更新
$ git fetch <遠端主機名>
要更新所有分支,命令可以簡寫為:
$ git fetch
上面命令將某個遠端主機的更新,全部取回本地。預設情況下,git fetch
取回所有分支的更新。如果只想取回特定分支的更新,可以指定分支名,如下所示 -
$ git fetch <遠端主機名> <分支名>
比如,取回origin
主機的master
分支。
$ git fetch origin master
所取回的更新,在本地主機上要用」遠端主機名/分支名」的形式讀取。比如origin
主機的master
分支,就可以用origin/master
讀取。
git branch
命令的-r
選項,可以用來檢視遠端分支,-a
選項檢視所有分支。
$ git branch -r
origin/master
$ git branch -a
* master
remotes/origin/master
上面命令表示,本地主機的當前分支是master
,遠端分支是origin/master
。
取回遠端主機的更新以後,可以在它的基礎上,使用git checkout命令建立一個新的分支。
$ git checkout -b newBrach origin/master
上面命令表示,在origin/master
的基礎上,建立一個新分支:newBrach。
此外,也可以使用git merge
命令或者git rebase
命令,在本地分支上合併遠端分支。
$ git merge origin/master
# 或者
$ git rebase origin/master
上面命令表示在當前分支上,合併origin/master
。