>我到处都看到拉取是获取+合并。 但是如果我明确指定源分支,如
(1) git pull origin somebranch
对
(2) git fetch origin somebranch
git merge origin/somebranch
只有调用 (2) 会更新我的远程跟踪分支。 调用 (1) 仅在合并到我当前分支之前更新FETCH_HEAD。 这两种行为都与其各自的文档一致。 它们只是彼此不一致(在指定源分支的情况下)。
在拉动的情况下,跳过远程跟踪分支的动机是什么? 为什么我要将远程跟踪分支留在本地分支后面?
1.8.4 git-pull
手册页的第二个示例确认了不更新远程跟踪分支的行为。 但它没有解释为什么。
git fetch
的行为在 1.8.4 中发生了变化。现在,如果存在这样的引用,则明确提到的 ref 会更新其本地跟踪引用。
这是发行说明中提到的更改。
我已经测试过,git pull origin master
现在确实更新了我的origin/master
跟踪参考,并且仍然与git fetch origin master
的新行为一致。
我认为对"为什么"最合理的解释是"歇斯底里的葡萄干",呃,历史原因。
这在"git pull origin mybranch"中被顺便提到,让本地mybranch N提交在origin之前。为什么?而 git pull origin master 不更新 origin/master?:当 git pull
调用 git fetch
时,它会传递阻止git fetch
更新refs/remotes/remote/branchname
的参数。 [编辑:正如查尔斯·贝利(Charles Bailey)所指出的,从1.8.4开始,这个历史怪异现在已经修复。
branch.name.remote
和branch.name.merge
到refs/remotes/remote/branch
跟踪分支的相当尴尬和复杂的映射补充了git pull
无法更新远程分支头的方式的尴尬(如果这有任何意义:-))。