我到处都看到拉是一个fetch +一个合并。但是,如果我明确指定源分支,如
(1) git pull origin somebranch
与
(2) git fetch origin somebranch
git merge origin/somebranch
仅调用(2)更新我的远程跟踪分支。 Invocation(1)仅在合并到当前分支之前更新FETCH_HEAD。这两种行为都与各自的文档一致。它们彼此不一致(在指定源分支的情况下)。
在拉动的情况下,跳过远程跟踪分支的动机是什么?为什么我要将远程跟踪分支留在我的本地分支之后?
1.8.4 git-pull
手册页的第二个示例确认了没有更新远程跟踪分支的行为。但它没有解释原因。
答案 0 :(得分:1)
我认为对“为什么”最明智的解释是“歇斯底里的葡萄干”,呃,历史原因。 : - )
这在'git pull origin mybranch' leaves local mybranch N commits ahead of origin. Why?和git pull origin master does not update origin/master?中提到:当git pull
调用git fetch
时,它会传递阻止git fetch
更新refs/remotes/remote/branchname
的参数}。 [编辑:如Charles Bailey notes,这个历史奇怪现在是固定的,从1.8.4开始。]
branch.name.remote
和branch.name.merge
到refs/remotes/remote/branch
用于跟踪分支的相当笨拙和复杂的映射补充了git pull
无法更新远程分支头的方式的尴尬(如果这有道理:-))。
答案 1 :(得分:1)
git fetch
的行为在1.8.4中发生了变化。现在,如果存在这样的引用,那么明确提到的ref会更新本地跟踪引用。
This is the change,已在release notes中提及。
我已经过测试,git pull origin master
现在更新了我的origin/master
跟踪参考,并且仍与git fetch origin master
的新行为一致。