2014-04-08 147 views
2

我不明白这个优点。我看到它在诸如this article之类的地方争论过,取而代之的是提取机会在将它们合并到本地分支之前检查这些更改。git fetch有什么意义?

但是,例如在该文章中,作者使用git diff master origin/master通过将新获取的分支与其本地主控进行比较来检查所做的更改。

这是我感到困惑的地方....无论您是否先取得指令,该命令都会起作用。无论哪种方式,它都比较本地主人和远程主人。您不需要获取将本地分支与远程分支进行比较。

我错过了什么?

回答

6

您错过了git fetch已用于更新远程分支的本地副本。

所以你提到的命令会做当地分支master本地副本的origin/master,而不是起源master分支的实际状态之间的difffetch将连接到远程服务器并下载远程的所有更改(更改分支,标签...)。

一如既往,git manual on Branching and Remote Branches解释得很好。

+0

哇。不知道。真的?没有提取,没有办法与远程分支进行比较?你必须有一个远程分支的“本地版本”? – Aerovistae

+0

因为git是一个分布式的CVS,你本地的git仓库将拥有它的本地分支(默认情况下为'master')。但是,如果您使用一个或多个远程服务器,git将制作这些服务器状态的本地副本。他们可能有一些当地的分支机构或不同的分支机构。我不知道有什么方法可以直接对远程回购进行差异化...(至少不在git本身中)。 – achedeuzot

+2

为了与远程仓库进行比较,您必须下载该仓库的状态。网络操作可能会很慢。非常慢为了不会受到网络操作的惩罚*每次运行diff时,git只在明确请求时才进行下载。这就是'git fetch'所做的。 –

-4

fetch是下级命令;例如,pull就是用它来实现的。在大多数情况下,您可能不会直接使用它。

+0

我强烈反对这一说法。 'git fetch'非常有用(详情请参阅公认的答案),我建议人们在几乎所有情况下都使用它(结合'git diff'和'git merge'),而不是'git pull'。 – Chris

+0

我也不会同意'fetch'比'pull'更“低级”。在Git中有[两个“级别”的命令](http://stackoverflow.com/questions/6976473/what-does-the-term-porcelain-mean-in-git),''fetch''和'pull'都是“瓷器”,而不是“管道”。 – Chris