git pull origin master不更新origin / master?

根据文档, git pull执行git fetch然后是git merge,但是在这种情况下,执行git pull origin master应该执行git fetch origin master right? 但是,似乎并没有这样做。 这是一个例子。

假设我的远程原点主(在我的情况下是在GitHub上)有以下的历史logging:

commit 1111111 : my first commit commit 2222222 : a commit from someone else 

我只在本地做第一次提交,就像下面的演出一样

 git checkout master git log --pretty=format:'%h' -n 1 1111111 git checkout origin/master git log --pretty=format:'%h' -n 1 1111111 

从这里我做我的拉,看看结果如下:

 git checkout master git pull origin master git log --pretty=format:'%h' -n 1 2222222 git checkout origin/master git log --pretty=format:'%h' -n 1 1111111 

可以看出,拉事实上更新我的主分支与来自远程起源的新的提交,但我的本地起源/主仍然是在那里。 强迫我做下面的事情

 git fetch origin master git checkout origin/master git log --pretty=format:'%h' -n 1 2222222 

这是正确的行为git拉或可能我有什么configuration错过? 我查看了git pull手册页,没有看到任何暗示,但我可能已经错过了。

这有点奇怪,但如果你使用git pull [remote] <refspec>它实际上不会更新远程参考。 如果以某种方式思考它是有道理的:因为你指定了一个特定的引用来获取,所以它不必查找关于你的远程分支的任何东西,所以它本质上不知道它是什么远程分支应该更新。 当然可以弄明白,如果最终得到修正,我也不会感到惊讶,但这是现有的行为。 (邮件列表上可能有消息 – 我不知道。)

不过,您可以轻松解决此问题。 如果你使用git pull origin/master ,由于你指定了通过远程分支来获取什么,它应该更新那个远程分支。 如果你是在你的主分支(或任何其他分支跟踪起源/主),你可以做git pull ,让它填写默认值,它会更新远程分支。

这在git-pull手册页中有logging,在EXAMPLES下也是其他地方最简洁的。 相关部分:

下一步将远程分支合并到当前分支中:

 $ git pull origin next 

这会在FETCH_HEAD中暂时保留下一个副本,但不会更新任何远程跟踪分支。 使用远程跟踪分支,可以通过调用提取和合并来完成相同的操作:

 $ git fetch origin $ git merge origin/next