0

我到处都看到拉动是提取+合并。但是如果我明确指定源分支,如

(1) git pull origin somebranch

相对

(2) git fetch origin somebranch
    git merge origin/somebranch

只有调用 (2) 会更新我的远程跟踪分支。调用 (1) 仅在合并到我当前的分支之前更新 FETCH_HEAD。这两种行为都与其各自的文档一致。它们只是彼此不一致(在指定源分支的情况下)。

在拉的情况下,跳过远程跟踪分支的动机是什么?为什么我要将远程跟踪分支留在本地分支后面?

1.8.4 手册页的第二个示例git-pull确认了没有更新远程跟踪分支的行为。但它没有解释为什么。

4

2 回答 2

1

1.8.4 中的行为发生了git fetch变化。现在,如果存在这样的 ref,则明确提到的 ref 会更新其本地跟踪 ref。

这是发行说明中提到的更改

我已经测试并且现在git pull origin master 确实更新了我的origin/master跟踪参考,并且仍然与git fetch origin master.

于 2013-11-08T08:11:38.743 回答
1

我认为对“为什么”最合理的解释是“歇斯底里的葡萄干”,呃,历史原因。:-)

'git pull origin mybranch'中提到了这一点,它使本地 mybranch N 提交在 origin 之前。为什么?并且git pull origin master 不更新 origin/master?: 当git pull调用时git fetch,它传递阻止git fetch更新的参数。[编辑:正如查尔斯·贝利所说,这个历史上的怪事现在已经修复,从 1.8.4 开始。]refs/remotes/remote/branchname

用于跟踪分支的相当笨拙和复杂的映射补充了无法更新远程分支头的笨拙方式(如果这有任何意义:-))。branch.name.remotebranch.name.mergerefs/remotes/remote/branchgit pull

于 2013-11-08T06:48:01.600 回答