在从远程拉出之前,我总是确保我没有本地提交以避免冲突。但是,我经历过这个:
admin@localhost ~/home (master) $ git status
# On branch master
nothing to commit, working directory clean
admin@localhost ~/home (master) $ git pull origin master
remote: Counting objects: 5, done.
remote: Total 5 (delta 4), reused 5 (delta 4), pack-reused 0
Unpacking objects: 100% (5/5), done.
From https://github.com/xxxxxxx
* branch master -> FETCH_HEAD
Updating 1234567..qwertyu
Fast-forward
home/templates/test.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
admin@localhost ~/home (master) $ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
从遥控器拉出后显示了未提示的提交。我使用git log origin/master..master
检查了未提交的提交,它显示了我从远程提取的最近提交。这是否意味着我必须两次推送相同的提交?
更新:我已通过运行
git fetch
解决了问题。顺便说一句,我 使用git版本1.8.3。谢谢!
答案 0 :(得分:1)
如果你的Git版本很旧(1.8.4之前),这种行为是正常的。
如果您的Git版本是1.8.4或更高版本,则此行为不正常。
(使用git --version
查找安装了哪个版本的Git。)
请记住,git fetch
期间有两个Gits:您的Git,以及您的Git通过互联网电话通过https://github.com/xxxxxxx
调用的另一个Git。你的Git有一个名为master
的分支。 他们的 Git也有一个名为master的分支。您的Git在您自己的存储库中添加了第三个实体,即远程跟踪分支,名为origin/master
。
这个远程跟踪分支的目的是记住“我们最后一次与原点交谈时,原点的主人在哪里”。
接下来,请注意:
git pull origin master
运行:
git fetch origin master && git merge FETCH_HEAD
在早于1.8.4的Git版本中,第一步 - git fetch
部分 - 在从origin/master
开始检索新提交时无法更新远程跟踪分支master
origin
。
这是一个错误,因此现在版本的Git,从版本1.8.4开始,现在从{{1}获取时“机会性地”更新origin/master
远程跟踪分支} origin
。换句话说,如果您的Git不是古老的,master
会更新您的git fetch origin master
。但如果它 那么古老,则无法更新您的origin/master
。
更新或未能更新您的origin/master
后,您的Git会继续执行您报告的origin/master
:
fast-forward
以便您自己的Updating 1234567..qwertyu
Fast-forward
home/templates/test.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
与master
上的master
相匹配。
如果您的Git是现代的,并且在origin
步骤中更新了origin/master
,那么您的Git现在会将您的git fetch
与您的master
进行比较,并且它们相符。如果您的Git很古老,那么您的Git现在会将您的origin/master
与您的master
进行比较,并且哇哇!您的origin/master
之前 {{1} }!但这仅仅是因为你的Git 忘了更新其原始实际主人的记忆。
要修复它,您只需运行:
master
甚至只是:
origin/master
即使在这些真正古老的Git发行版中,也会让你的Git更新“git fetch origin
在git fetch
上的位置”。
(如果您set origin/master
as the "upstream" for master
,您可以通过运行master
完全停止使用origin
,或将git pull
命令缩短为git fetch && git merge
。在这一点上做同样的事情,但使用git pull
意味着您不必担心古代版本的Git中的这个小错误。它还为您提供了更多选项,例如 not 毕竟:>运行git pull
:您可以运行git fetch && git merge
,而这更有意义。)