[英]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.