Git:pull与fetch→;拉

Git:pull与fetch→;拉,git,Git,对于这个问题,我从来没有得到一个明确的答案 很长一段时间以来,在一位同事的建议下,我一直在这样做: git fetch origin git pull origin <mybranch> git获取来源 git拉原点 我被告知(并且已经看到)如果不先执行git fetch,那么git pull的行为就不一样了。您不会得到任何远程更改 但是我在网上看到的是,git pull相当于git fetch,然后是git merge。如果这是真的,git-pull将包括git-fetch,我

对于这个问题,我从来没有得到一个明确的答案

很长一段时间以来,在一位同事的建议下,我一直在这样做:

git fetch origin
git pull origin <mybranch>
git获取来源
git拉原点
我被告知(并且已经看到)如果不先执行
git fetch
,那么
git pull
的行为就不一样了。您不会得到任何远程更改

但是我在网上看到的是,
git pull
相当于
git fetch
,然后是
git merge
。如果这是真的,
git-pull
将包括
git-fetch
,我不需要先显式地
git-fetch
,对吗?但事实似乎并非如此


因此,我要寻找的是一些明确的文档,这些文档描述了观察到的
git pull
行为。(我知道我可能还会得到很多建议,可以切换到
git fetch
git-merge
;这也很好,但我对git-pull真正感兴趣。

git-pull是一个get-fetch,然后是git-merge。(或者您可以使用--rebase选项重新设置基址)。所以不,在“git pull”之前,您不需要执行“git fetch”

键入“git-help-fetch”和“git-help-pull”以获取说明

git fetch进入命名存储库,获取被引用的对象(通常是提交),获取它及其所有依赖对象,并将其存储在命名的远程跟踪分支中。然后,您可以从那里合并或重新设置基址。”git merge origin/master”或您可以使用“git checkout origin/master”查看它

我已经被告知(并且已经看到)如果您不首先执行git fetch,git pull的行为就不一样。您不会得到任何远程更改

通常情况下,情况并非如此,git pull从远程获取状态

但我在网上看到的是git pull相当于git fetch,然后是git merge。如果这是真的

是的

引用git pull的手册页面:

将远程存储库中的更改合并到当前分支中。在默认模式下,git pull是git fetch的缩写,后跟git merge fetch\u HEAD

我想这就解决了

所以我要找的是一些明确的文档


我们可能应该将其作为副本关闭,但在此之前,让我看看是否可以将其压缩

虽然
git pull
实际上是
git fetch
然后是
git merge
(或
git rebase
),但确切的区别在于
git pull
如何运行
git fetch

具体而言:

$git pull

或:

$git pull远程名称分支名称

(或各种类似变体)运行,而不是普通的
git fetch
,也不是
git fetch remote name
,而是
git fetch remote name branch name

这与该版本之前相比差异较小,因为:

  • git fetch origin master
    不同于
    git fetch origin
    git fetch
    未更新参考文件/遥控器/原点/主文件;这是一个很早的决定 保持远程跟踪分支更新的设计决策 这是可以预测的,但在实践中,人们发现这一点更多 无论何时我们有一个 机会,我们在运行
    gitpush
    时一直在更新它们 已经打破了最初的“可预测性”
换句话说,如果
git pull
决定运行
git fetch origin master
,这将更新存储库中的
origin/master
,但前提是您没有运行git的古老版本,例如某些未命名的Linux发行版中包含的版本


如果您运行
git fetch origin
,您将得到所有远程跟踪分支的更新(前提是您有一个合理的配置,即使在上述git的古老版本中,这也是默认配置)。如果您运行
git-fetch-origin-master
,您将只得到
origin/master
更新,并且仅当您的git没有太可笑地过时时。由于
git pull
运行四字变体,因此它只更新一个甚至不更新远程跟踪分支。

:将远程存储库中的更改合并到当前分支中。在默认模式下,
git pull
git fetch
的简写,后跟
git merge fetch\u HEAD
。fetch有助于在将新更改应用到本地存储库之前查看它们。是的,请参见,但其行为确实有所不同。我可以整天复制它。这就是我所困惑的。它的行为有什么不同?@JohnAlexander你的跟踪设置是什么样的<代码>git branch-avv将向您显示。也许你的跟踪关系不像这里的人所期望的那样。可能就是这样。我还没有足够的心理空间来做深入的测试,但这是第一个承认某种差异的反应。
$ git help pull