git pull origin master不更新origin / master?

时间:2011-12-31 15:58:24

标签: git github git-pull git-fetch

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

假设我的远程源主站(在我的情况下在GitHub上)具有以下历史记录:

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

可以看出,pull确实用远程源的新提交更新了我的master分支,但是我的本地origin / master仍然在那里。强迫我做以下

git fetch origin master

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

这是git pull的正确行为还是我可能会错过配置?我查看了git pull手册页,并没有看到任何暗示这一点,但我可能错过了它。

3 个答案:

答案 0 :(得分:29)

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

但是,您可以轻松解决它。如果您使用git pull origin/master,因为您要指定通过远程分支获取的内容,它应该更新该远程分支。如果你仍然在你的主分支(或任何其他分支跟踪起源/主人),你可以git pull并让它填写默认值,它将更新远程分支。

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

  

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

$ git pull origin next
     

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

$ git fetch origin
$ git merge origin/next

答案 1 :(得分:0)

似乎您已经分叉了存储库,并且分叉的分支未使用最新代码进行更新

答案 2 :(得分:0)

我也遇到了这个问题-在分支上运行“ git pull”时,然后检查了日志,但尚未更新。感到困惑,我实际上是从git pull中读取输出的,它特别提到您需要告诉git在哪里合并,这是通过沿着“ git pull [remote] [local branch]”行的命令完成的,即对我来说是git pull origin newfeature1“。

第一次尝试发出问题:

Z:\Abusers\jd\repo1> git pull
remote: Enumerating objects: 15, done.
remote: Counting objects: 100% (15/15), done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 16 (delta 7), reused 15 (delta 7), pack-reused 1
Unpacking objects: 100% (16/16), done.
From github.abc.com:group1/repo1
   06aefba..e5ed6ee  develop    -> origin/develop
   af689cb..b8667a6  newfeature1-> origin/newfeature1
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> newfeature1

工作命令:

Z:\Abusers\jd\repo1> git pull origin newfeature1
From github.abc.com:group1/repo1
* branch            newfeature1-> FETCH_HEAD
Updating af689cb..b8667a6
Fast-forward
.../file1.py                |   2 +-
abc/yes1/cool1.a        | Bin 0 -> 106329 bytes
.../abc.py                    |   7 ++++---
3 files changed, 5 insertions(+), 4 deletions(-)
create mode 100644 abc/yes1/cool1.a