15

所以 - 有人可以澄清这一点:

我跑:

git pull origin master  
git status

然后它会拉出更改并说:

your branch is ahead of origin/master ... blahblah by 6 commits...

当我然后跑

git fetch
git status

它说:

# On branch master
nothing to commit (working directory clean)

所以 - 我认为git pull默认情况下 git fetch - 那么为什么它说“提前 6 次提交”而没有额外的git fetch

4

1 回答 1

2

中的“Ahead or behind by X commits”文本git status基于当前分支的跟踪分支的状态;remotes/origin/master例如,如果你在master

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

git fetch另一方面,在没有指定参数的情况下运行更新所有远程跟踪分支,因此它会使消息消失。git pull没有参数也一样。

一个微妙的陷阱,我自己已经打了很多次了!我希望 git 在每次获取特定远程时更新所有远程跟踪分支。

于 2013-12-12T18:21:11.757 回答