这是一个常见的混淆来源,以至于#git
IRC 频道有一个罐头帮助文本,称为!pull4
:
我们建议不要使用 'git fetch/pull <remote> <refspec>'(即带有分支参数),因为它不会更新 <remote>/<branch> 参考。正确获取东西的简单方法是获取所有内容:如果您有一个遥控器,“git fetch”或“git pull”就足够了;否则我们推荐 'git fetch <remote>'(如果你想拉/合并,加上 'git merge <remote>/<branch>')。
这里发生的情况是,在“默认远程”(通常)上git pull
没有参数的情况下,然后是与您当前本地分支相对应的远程分支。对明确指定的遥控器做同样的事情。但是,“四字拉动”将该分支提取到一个临时位置,而不更新您的跟踪分支,然后合并到您当前的分支中。git fetch
origin
git merge
git pull <remote>
git pull <remote> <branch>
FETCH_HEAD
FETCH_HEAD
因此,通过使用git pull origin blob
,您是在说“我想将blob
远程分支的最新版本合并origin
到我当前的分支中,而不更新我的任何跟踪分支或获取任何其他数据”。
如果您的分支合并配置是正确的(并且它们可能是,因为git clone
并git checkout
尝试自动设置它们),您可以git pull
或者git pull origin
它会获取所有内容,然后合并与您当前签出的分支相对应的分支。如果您想要更明确的控制,请使用git fetch
然后git merge
. git pull <remote> <branch>
很少是你想要的。
(git fetch
在您的示例中修复问题的原因是,在拉取之后,您的本地分支已使用最新的远程提交更新,但跟踪分支尚未更新。git fetch
使用这些提交更新跟踪分支,此时差异重新开始有意义。)