繁体   English   中英

与 git fetch 和 git pull 混淆

[英]confusion with git fetch and git pull

我正在阅读git scm book并阅读此页面上的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>

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

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

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

   a82339d..9844eeb  master -> upstream/master

但根据git-fetch手册中输出部分,这意味着

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

请注意,本地存储库中的分支master未更新。

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

不知道为什么这会产生混乱......无论如何:你提到的评论正是 git fetch 正在做的。 请看一下 old 'git pull' 和 'git fetch' 有什么区别?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM