【问题标题】:confusion with git fetch and git pull混淆 git fetch 和 git pull
【发布时间】:2017-02-09 08:54:01
【问题描述】:

我正在浏览 git scm book 并阅读 this page 上的 Pulling 部分。它说:

虽然 git fetch 命令会获取服务器上您还没有的所有更改,但它根本不会修改您的工作目录。它只会为您获取数据并让您自己合并。

我使用了“git fetch upstream”,它确实将远程分支中存在的所有更改合并到我的本地分支,据我说,它也更新了工作目录。但这与上面的说法相矛盾。

我很困惑,无法理解它。谁能解释一下?

我已经浏览了标记为重复的链接。我也可能是愚蠢的,但我没有从这些答案中得到任何明确的上述陈述。请帮忙。

更新

这是我运行的命令及其输出:

bash-3.2$ git fetch upstream
remote: Counting objects: 108, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 108 (delta 77), reused 77 (delta 77), pack-reused 23
Receiving objects: 100% (108/108), 25.92 KiB | 0 bytes/s, done.
Resolving deltas: 100% (79/79), completed with 31 local objects.
From <git-repo-url>
   a82339d..9844eeb  master -> upstream/master
   802bae5..6c84bfb  <some-branch> -> upstream/<some-branch>

【问题讨论】:

  • 在 SO 上有很多答案,对于相同的问题有最好的解释,请参考任何一个。
  • 是的……你可以找到很多类似的答案……无论如何,我尝试在我的答案中收集一些命令差异……希望对您有所帮助!祝你有美好的一天!
  • 您能否包括您在问题中使用的确切命令,以及使您相信git fetch 已更新您的工作目录的输出?

标签: git


【解决方案1】:

我使用了“git fetch upstream”,它确实合并了所有更改 存在于我的本地分支的远程分支中,根据 我也更新了工作目录。但随后又与 上面的说法。

git fetch 不会更新您的本地分支或工作目录。

你可能认为它更新了一个本地分支,给定这样的一行,

   a82339d..9844eeb  master -> upstream/master

但根据Output section in the git-fetch manual,这意味着

  • master 是“ref”的名称(分支是一种 ref)在远程存储库中从中获取,并且
  • upstream/master 是正在更新的本地存储库中的 ref 的名称。

注意,本地仓库中的分支master没有更新

【讨论】:

  • 感谢您的帮助。这个答案以及我阅读的一些文章帮助我最终理解了它。事情很困难,直到你不理解它。
【解决方案2】:

不同之处在于 git pull 执行 git fetch 后执行 git merge 以更新您的本地分支。

【讨论】:

    【解决方案3】:

    不知道为什么这会产生混乱......无论如何:你提到的评论正是 git fetch 正在做的事情。 请看老 What is the difference between 'git pull' and 'git fetch'?

    例如: git fetch origin --> 将获取更改但不会合并到您的更改中 git merge origin/master --> 之后必须使用合并。

    另一种以时尚和快速的方式执行此操作的方法是使用 pull: git pull origin(whatever) --> 将一举两得。

    希望这能澄清您的疑虑 :-) 祝您有美好的一天!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-31
      • 2018-03-05
      • 2011-03-22
      • 2022-06-14
      • 2020-01-31
      • 2017-06-30
      • 2021-08-17
      相关资源
      最近更新 更多