git fetch
命令用於從另外一個存儲庫下載對象和引用。git
使用語法shell
git fetch [<options>] [<repository> [<refspec>…]] git fetch [<options>] <group> git fetch --multiple [<options>] [(<repository> | <group>)…] git fetch --all [<options>]
從一個或多個其餘存儲庫中獲取分支和/或標籤(統稱爲「引用」)以及完成其歷史所必需的對象。 遠程跟蹤分支已更新(Git術語叫作commit
),須要將這些更新取回本地,這時就要用到git fetch
命令。fetch
默認狀況下,還會獲取指向正在獲取的歷史記錄的任何標籤; 效果是獲取指向您感興趣的分支的標籤。可使用--tags
或--no-tags
選項或經過配置遠程.<name>.tagOpt
來更改此默認行爲。 經過使用顯式提取標籤的refspec
,能夠獲取不指向您感興趣的分支的標籤。spa
git fetch
能夠從單個命名的存儲庫或URL中獲取,也能夠從多個存儲庫中獲取,若是給定了<group>
,而且配置文件中有一個遠程<group>
條目。code
獲取的參考名稱以及它們所指向的對象名稱被寫入到.git/FETCH_HEAD
中。 此信息可能由腳本或其餘git命令使用,如git-pull
。對象
如下是一些示例 -ip
1.更新遠程跟蹤分支rem
$ git fetch origin
上述命令從遠程refs/heads/
命名空間複製全部分支,並將它們存儲到本地的refs/remotes/ origin/
命名空間中,除非使用分支.<name>.fetch
選項來指定非默認的refspec
。it
2.明確使用refspecio
$ 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
。