git pull vs git-fetch有些困惑

Dan*_*boy 12 git git-pull git-fetch

所以 - 有人可以澄清这个:

我跑:

git pull origin master  
git status
Run Code Online (Sandbox Code Playgroud)

然后它就会提出改变并说:

your branch is ahead of origin/master ... blahblah by 6 commits...
Run Code Online (Sandbox Code Playgroud)

当我跑的时候

git fetch
git status
Run Code Online (Sandbox Code Playgroud)

它说:

# On branch master
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

所以 - 我认为git pull默认情况下会执行git fetch - 那么为什么它会在没有额外的情况下"提前6次提交" git fetch呢?

Ash*_*son 3

中的“领先或落后 X 提交”文本git status基于当前分支的跟踪分支的状态;例如,remotes/origin/master如果您在 上。master

当您git pull使用指定的远程和分支运行时,它会获取新的提交并将它们合并到当前分支,但它不会更新源的远程跟踪分支。相反,它指向刚刚获取的提交作为FETCH_HEAD.

git fetch另一方面,在不指定参数的情况下运行更新所有远程跟踪分支,因此它会使消息消失。git pull不带任何参数执行相同的操作。

这是一个微妙的陷阱,我自己也遇到过很多次!我希望 git 在针对特定远程的每次获取时更新所有远程跟踪分支。