我正在浏览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>
答案 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;将一举两得。
希望这有点澄清你的疑惑:-)祝你有愉快的一天!