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