为什么本地提交会在git pull之后出现?
在从远程拉之前,我总是确保没有本地提交来避免冲突。然而,我经历过:为什么本地提交会在git pull之后出现?,git,github,Git,Github,在从远程拉之前,我总是确保没有本地提交来避免冲突。然而,我经历过: 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
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。谢谢
如果您的Git版本非常旧(1.8.4之前),这种行为是正常的 如果您的Git版本为1.8.4或更高版本,则此行为不正常 (使用
git--version
查找安装的git版本。)
这里有三个(而不是两个)实体在起作用
记住,git获取过程中涉及到两个git:您的git,另一个git您的git通过Internet电话调用https://github.com/xxxxxxx
。您的Git有一个名为master
的分支。他们的Git还有一个名为master的分支。Git在您自己的存储库中添加了第三个实体,即远程跟踪分支,名为origin/master
这个远程跟踪分支的目的是记住“origin的主人在哪里,上次我们与origin交谈的时候”
接下来,请注意:
git pull origin master
运行:
在早于1.8.4的Git版本中,Git fetch
部件从origin
上的master
检索新提交时,第一步无法更新远程跟踪分支origin/master
这被证明是一个错误,因此Git的现代版本,从1.8.4版开始,现在当您从origin
的master
取货时,“机会主义地”更新您的origin/master
远程跟踪分支。换句话说,如果您的Git不是非常古老,Git fetch origin master
会更新您的origin/master
。但是如果它是那么古老,它就无法更新您的源代码/master
更新或未能更新您的源代码/主代码
,然后您的Git继续执行您报告的快进
:
因此,您自己的主控
与原点上的主控
匹配
如果您的Git是现代的,并且在Git fetch
步骤中更新了origin/master
,那么您的Git现在会将master
与origin/master
进行比较,并且它们匹配。如果你的Git是古老的,那么你的Git现在会将你的母版
与你的源版/母版
进行比较,哇-您的母版
位于您的原点/母版
之前!但这仅仅是因为您的Git忘记更新其原始主机的实际主内存
要修复此问题,您只需运行:
git fetch origin
甚至只是:
git fetch
即使在这些真正古老的Git发行版中,它也会让您的Git更新其内存“wheremaster
位于origin
”
(如果您这样做,您可以通过运行git fetch&&git merge
完全停止使用git pull
,或者将git pull
命令缩短为只使用git pull
。这两者在这一点上做的事情几乎相同,但使用git fetch&&git merge
意味着您不必担心anci中的这个小错误Git的ent版本。它还为您提供了更多选项,例如不运行Git merge
毕竟:您可以运行Git-rebase
,这样做更有意义。)有问题的提交是否出现在服务器上(即github.com web)?您是否已将本地提交推送到远程?这意味着您有本地提交,但git将其与获取的源站/主站进行比较,它发生在拉取之后。清除意味着您没有UMCommitted更改。无论如何,您应该在推取之前进行拉取。是的,我已将本地提交推送到远程,并且它显示在远程服务器上。我没有cal在从远程服务器拉取之前提交。它只在拉取之后出现。你说的“通过互联网电话”是什么意思?@Alexan:你如何与其他人交谈?当然是通过电话(语音或文字,通过电话或智能手机)那么…一个Git是如何与另一个Git对话的?这是某种表达方式吗?以前从未听说过。我想出了它:-)这是为了唤起人们的回忆,让人们真正理解两个Git之间的对话。一个Git(发送端)向另一个Git(接收端)发送散列ID等。对话以协议版本/选项交换开始;之后,发送方提供对象,接收方回复“发送那个”或“我已经有那个”,直到他们确定需要发送什么为止。然后发送者将这些对象打包(“计数…压缩”)并发送它们。最后,[继续]最后,发送方和接收方可以确认各种更新,并将它们保存在各自的引用中,或者对于git push
,接收方可以根据运行git hook的结果拒绝进行更新。
git fetch origin
git fetch