git fetch從遠程倉儲導入commit到你的本地倉儲. 這些fetch到的commit是做為一個遠程分支存儲在你本地的. 這樣你可以在集成這些commit到你的項目前先看看都有些什么修改.
用法
git fetch <remote>
獲取遠程倉儲所有的分支.
git fetch <remote> <branch>
獲取遠程倉儲指定的分支
討論
當你想看看其他人都做了些什么工作的時候你可以使用fetch. 因為fetch到的內容是做為一個remote分支的形式展現出來的, 所以不會對你的本地開發有什么影響. 因此fetch是在你想merge遠程的commit前, 先來查看查看這些commit的一個安全的辦法. 他不回強迫你merge.
遠程分支
遠程分支類似於本地分支, 不同點在於他們代表是其他人的倉儲的分支. 你可以checkout一個遠程分支, 當你checkout一個遠程分支的時候, 你處於一個detached HEAD的狀態(就如checkout 一個老的commit). 你可以把他想象成是一個只讀的分支. 想要查看遠程分支, 只要在git branch的后面加上一個-r標記. 遠程分支的前綴是remote這樣就不會和本地分支混淆了. 下面的例子演示怎么查看遠程分支:
git branch -r # origin/master # origin/develop # origin/some-feature
如果你覺得遠程分支的一些修改沒問題你可以使用git merge把他們merge到你的本地分支. 和svn不一樣, git同步遠程的倉儲需要兩步:fetch和merge. git pull命令是這一個git fetch加git merge的更簡便的寫法.
例子
下面的例子演示了同步你本地倉儲和遠程倉儲的典型工作流.
git fetch origin
運行后會顯示哪些branch被下載下來了:
a1e8fb5..45e66a4 master -> origin/master a1e8fb5..9e8ab1c develop -> origin/develop * [new branch] some-feature -> origin/some-feature
在下圖中遠程分支的commit是矩形的, 本地的是圓形的.
為了查看哪些commit被添加到了上游master, 你可以運行git log 另外加上origin/master做為過濾器
git log --oneline master..origin/master
批准遠程分支的修改並merge到我們的本地master分支可以使用如下的命令:
git checkout master git log origin/master
然后開始merge
git merge origin/master