some confusion on git pull vs git-fetch
所以-有人能澄清这一点吗?
我跑:
1 2
| git pull origin master
git status |
然后它拉动变化并说:
1
| your branch is ahead of origin/master ... blahblah by 6 commits... |
当我奔跑的时候
它说:
1 2
| # On branch master
nothing to commit (working directory clean) |
所以-我认为git pull是git默认获取的-那么为什么它说"提前6次提交",没有额外的git fetch?
- 在这种特殊情况下,它意味着它所说的:你的分支在前面,即包含未完成的提交,这与拉无关,它只是对你的一个提示。
- @布雷迪肯,但我刚刚取消了这些承诺——为什么它们会被列为联合国推动?这就是我困惑的地方。为什么当我从远程分支中提取更改时,我不会立即收到一条消息"没有什么要提交(工作目录清理)"?
- 有没有可能在你第二次运行git status之前,你运行git push?
- @丹尼博伊,你当地的承诺是不受推动的,不是那些你拉的。
- @但我没有任何地方承诺。如果我在git pull之后执行git fetch->这个消息没有出现,我只会得到"没有要提交的内容(工作目录清理)"。
- 微霉号
- 您的分支机构master也可能没有跟踪origin/master。所以当你运行git pull origin master时得到这个输出,而不是git status。你能把你的.git/config文件内容发出去吗?
- @Dannyboy是因为fetch刷新本地机器上的远程分支(origin/master,pull直接合并到本地master分支。
- @Bredikhin,但来自文档:"在默认模式下,git pull是git fetch的缩写,后面是git merge FETCH_HEAD"。所以拉也能取-我错了吗?
- @micromoses粘贴.ubuntu.com/6562613
- 江户十一〔16〕;江户十一〔17〕。
git status中的"前进或后退x提交"文本基于当前分支的跟踪分支的状态;例如,如果您在master上,则为remotes/origin/master。
当您在指定了远程和分支的情况下运行git pull时,它会获取新的提交并将它们合并到当前分支,但不会更新源站的远程跟踪分支。相反,它指出了作为FETCH_HEAD的刚刚获取的提交。
另一方面,在没有指定参数的情况下运行git fetch,确实会更新所有的远程跟踪分支,因此会使消息消失。没有论据的git pull也是这样。
一种微妙的感觉,我自己打了很多次!我希望Git在每次获取特定远程文件时更新所有远程跟踪分支。
- 只是出于好奇,你知道为什么git pull 不更新remote/branch参考吗?是歇斯底里的葡萄干,还是有充分的理由?
- 事实证明,它实际上根本不是git pull ;实际上是git pull 。"refspec"基本上是由冒号分隔的源-目标对,如master:origin/master;git pull origin master:origin/master的意思是"到origin-remote,给我它的主分支,并在本地存储库中更新origin/master"。如果您不使用冒号,fetch根本不会更新任何本地ref,只有FETCH_HEAD。
- 进一步阅读:git-scm.com/book/en/git-internals-the-refspec