与git fetch和git pull混淆

时间:2017-02-09 08:54:01

标签: git

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

  

虽然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>

3 个答案:

答案 0 :(得分:1)

  

我使用了'git fetch upstream',它确实合并了所有的更改   存在于我的本地分支的远程分支中,根据   我也更新了工作目录。但后来却与之相矛盾   以上陈述。

git fetch不会更新您的本地分支机构,也不会更新您的工作目录。

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

   a82339d..9844eeb  master -> upstream/master

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

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

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

答案 1 :(得分:0)

区别在于git pull执行git fetch后跟git merge来更新本地分支。

答案 2 :(得分:0)

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

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

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

希望这有点澄清你的疑惑:-)祝你有愉快的一天!