git pull无法从远程拉出更改

时间:2018-02-08 16:39:13

标签: git github

我的git日志如下所示:enter image description here

据我所知,当master在本地机器上时,origin / master和origin / HEAD位于远程存储库中。更改被推送到存储库(由我从另一台计算机)创建提交0e17adc。我现在想把这个更改带到我的本地存储库中。我认为正确的做法是:

git checkout master
git pull

但是这会返回:

Already up-to-date.

为什么会这样? master在我看来与origin / master不同步,我认为git pull做了git fetch然后git merge所以应该将origin / master与master合并?

1 个答案:

答案 0 :(得分:1)

  

据我所知,当master在本地机器上时,origin / master和origin / HEAD位于远程存储库中。

这不是很正确(并且细节很重要)但它有正确的想法支持:origin/master在你的本地机器中,但它是你Git的记住的方式你的Git从他们的(起源)Git得到了什么。当您运行git fetch(或git pull运行git fetch)时,您的Git会根据您的Git存储的URL以及名称origin来调用他们的Git。他们的Git列出了他们的master及其提交哈希ID,你的Git确保你有所需的提交,然后设置你自己的origin/master来记住他们的master。 / p>

  

我现在想把这个更改带到我的本地存储库中。我认为正确的做法是:

git checkout master
git pull

这是人们通常采用的一种方式。 (我更喜欢自己避免使用git pull并打破各个命令。)

  

但是这会返回:

Already up-to-date.

如果你运行git branch -vv(详细两次:非常详细)你应该看到类似的东西,但不同(这是在Git的Git存储库中):

* master          5be1f00a9 [origin/master] First batch after 2.16

此处方括号中的内容origin/mastermaster的当前上游设置。每个分支可以有一个(并且只有一个)上游,您可以使用git branch --set-upstream-to设置。

当您运行git pull(或像我一样将其分解为其组件)时,Git:

  1. 运行git fetch:另一个Git从默认值获取到当前分支的上游远程,在这种情况下是origin的{​​{1}}部分;然后
  2. 运行第二个Git命令,通常是origin/master:此命令的参数取决于你的Git从其他Git获得的内容,以及上游设置的其余部分。
  3. 如果某些设置被严重破坏,还有一堆重要细节可能很重要,但简而言之,如果git merge显示git branch -vv为上游,则:

    origin/master

    应该执行与运行git fetch origin git merge origin/master 时相同的操作...而会导致您在图片中显示的git pull输出结果。所以在这一点上我最好的猜测是git log的上游没有正确设置。

    您可以运行master进行查看,或使用:

    git branch -vv

    在我的案例中打印:

    $ git rev-parse --symbolic-full-name "master@{upstream}"
    

    (我把引号放在refs/remotes/origin/master 左右,因为有些命令行解释器有时会使用不带引号的括号做有趣的事情,但大多数情况下你不需要这样做。)

    如果上游错误,并且您在master@{upstream}并且想要修复它,请运行:

    master

    这假设您添加git branch --set-upstream-to=origin/master 时Git版本至少为1.8.0。在较旧的Git中,您可以使用:

    --set-upstream-to

    git config branch.master.remote origin git config branch.master.merge master 命令 - 注意到此处缺少git branch --set-upstream - 太难以正确使用;避免使用它。)