'git remote update','git fetch'和'git pull'有什么区别?


78

我现在开始和Git一起玩,我有点困惑。对我来说,看起来有很多选择可以做同样的事情。我现在的问题是以下命令之间的区别是什么:

  • git远程更新
  • git获取
  • git pull

还有哪一个更适用于更新远程分支的本地副本?



Answers:


102

git remote update 将更新您的所有分支集以跟踪远程分支,但不合并任何更改。

git fetch 只会更新您所在的分支,而不会合并其中的任何更改。

git pull将更新合并您当前所在分支的所有远程更改。这将是您用来更新本地分支的那个。


6
git fetch如果需要,将更新其他分支。试试git fetch --all
Arafangion

7
你知道你其实可以做使用refspec?:取快进合并git fetch origin master:master。但这仅在您尚未master签出的情况下有效,因为Git必须移动分支指针,并且如果您当前在分支上则不会这样做。

8
即使不使用--all开关,“ get fetch”似乎也会获取所有分支。(适用于Windows的Git 2.10.0.1)
Simon P Stevens

14
这个答案有几个错误。通常,它们来自于将远程跟踪分支与常规分支相混淆,这是一个很大的错误。 git fetch不会更新“您所在的分支”。但是它确实更新了该远程服务器的所有远程跟踪分支,origin或者更新了当前远程服务器的上游跟踪分支的任何远程分支。
Colin D Bennett

18
另请参阅stackoverflow.com/a/17512004/994153中的非常完整的答案,该答案描述了git fetch --all一次不存在的原因,因此git remote update更有用。现在--all已经添加到中了git fetch,这git remote update实际上不是必需的。
Colin D Bennett

-7

不确定git远程更新,但是git pull是git fetch,之后会自动进行git merge ...

这部分是重复的。检查: “ git pull”和“ git fetch”有什么区别?

另外,如果这对您来说意味着什么,那么我从未使用过git remote update,也从未使用过fgit fetch。您可以使用pull,commit和push来做得很好。

希望能帮助到你..


1
git fetch有它的位置...有时您只关心经理修剪了多少个分支;有时,您只希望您所在分支的更新。
Makoto

我想这是有道理的=)
LucasA 2013年

2
我几乎从未使用过git pull,我总是喜欢在合并之前预览所有上游更改,因此我主要使用git fetch

通常你不想合并本地工作正在进行分支掌握还,所以最好是git remote updategit rebase,直到你的工作之后,可以合并。否则,您将最终在历史记录中遇到许多无用的合并提交。
user2061057 '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.