【问题标题】:Git: pull vs. fetch→pull [duplicate]Git:拉取与获取→拉取[重复]
【发布时间】:2016-09-18 00:22:04
【问题描述】:

我一直无法得到这个问题的明确答案。

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

git fetch origin
git pull origin <mybranch>

我被告知(并且已经看到)如果您不先执行 git fetchgit pull 的行为方式将有所不同。您没有得到任何远程更改。

但我在网上看到的只是git pull 相当于git fetch,后跟git merge。如果这是真的,git pull 将包括git fetch,我不需要首先明确的git fetch,对吧?但似乎并非如此。

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

【问题讨论】:

  • official documentation:将远程存储库中的更改合并到当前分支中。在其默认模式下,git pullgit fetch 后跟 git merge FETCH_HEAD 的简写。
  • Fetch 非常适合在新更改应用到本地存储库之前查看它们。

标签: git


【解决方案1】:

我们可能应该把它作为一个副本关闭,但在此之前,让我看看我能不能把它挤进去。

虽然git pull 真的 git fetch 后跟git merge(或git rebase),但精确的区别在于如何 git pull 运行 git fetch

具体来说:

$ git pull

或:

$ git pull <em>remote-name branch-name</em>

(或各种类似的变体)运行,不是普通的git fetch,不是git fetch <em>remote-name</em>,而是git fetch <em>remote-name branch-name</em>

由于Git version 1.8.4,这与该版本之前相比较少

  • git fetch origin master 不像 git fetch origingit fetch 没有更新refs/remotes/origin/master;这是一个早期的 设计决策以保持远程跟踪分支的更新 可预测的,但在实践中,人们发现它更多 方便我们有机会随时更新它们 机会,当我们运行 git push 时,我们一直在更新它们 反正已经打破了原来的“可预测性”。

换句话说,如果git pull 决定运行git fetch origin master,这将更新您的存储库中的origin/master — 但只有在您没有运行旧版本的 Git 时在某些未命名的 Linux 发行版中。

如果您运行git fetch origin,您将获得所有 远程跟踪分支更新(前提是您有合理的配置,即使在上述古老版本的 Git 中也是默认配置)。如果你运行git fetch origin master,你只会更新origin/master,而且只有在你的Git不是太可笑地过时的情况下才会再次更新。由于git pull 运行四字变体,它只更新一个,甚至不更新远程跟踪分支。

【讨论】:

    【解决方案2】:

    我被告知(并且已经看到)如果您不先执行 git fetch,则 git pull 的行为方式会有所不同。您没有得到任何远程更改。

    通常情况并非如此,git pull 会从远程拉取状态。

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

    是的!

    引用git-pull的手册页:

    将来自远程存储库的更改合并到当前分支中。在其默认模式下,git pull 是 git fetch 后跟 git merge FETCH_HEAD 的简写。

    我认为这样就解决了。

    所以我正在寻找的是一些明确的文档

    $ git help pull
    

    【讨论】:

    • 是的,看,但它确实表现不同。我可以整天复制它。这就是我感到困惑的地方。
    • 它的行为有何不同?
    • @JohnAlexander 您的跟踪设置是什么样的? git branch -avv 会告诉你。也许您的跟踪关系看起来不像这里的人们所期望的那样。
    【解决方案3】:

    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' 查看它

    【讨论】:

      猜你喜欢
      • 2014-04-30
      • 2016-07-08
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2011-06-06
      • 1970-01-01
      相关资源
      最近更新 更多