Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么本地提交会在git pull之后出现?_Git_Github - Fatal编程技术网

为什么本地提交会在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更新其内存“where
master
位于
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