我尝试过进行一些更改,将其推送到Github。从另一台计算机上,我获取了这些变化。当我执行git status
时,会报告此信息:
On branch MyTestBranch
nothing to commit, working directory clean
这很奇怪,因为我确定已经提取了更改。我甚至可以合并那些提取的更改!
事实上,当我去找我朋友的电脑并做git status
时,我可以看到:
Your branch is behind 'origin/MyTestBranch' by 1 commit, and can be fast-forwarded.
但为什么Git报告的内容与我origin/MyTestBranch
之类的内容有关,或者我的分支是否与origin/MyTestBranch
保持同步?
答案 0 :(得分:22)
我此时的猜测(我还在等待sorted
或git branch -vv
结果)是您没有将git rev-parse --symbolic-full-name "@{u}"
设置为origin/MyTestBranch
的上游。
要将分支设置为当前分支的上游,请使用:
MyTestBranch
1
在这种情况下扩展为:
git branch --set-upstream-to upstream
要删除上游设置,请使用git branch --set-upstream-to origin/MyTestBranch
。
上游设置的存在与否主要影响git branch --unset-upstream
是否可以告诉您是否提前和/或落后,以及git status
和git merge
是否能够完成工作附加参数。所以它基本上只是一个便利设置。
通常,当您通过git rebase
基于远程跟踪分支创建分支来首次签出分支时,会自动设置上游。例如,在你的第一个git checkout
上,Git最后运行,相当于:
git clone
即使你还没有git checkout master
。然后Git发现你有master
(而没有其他origin/master
,因此哪个远程使用没有问题,并且相当于:
remote/master
创建指向与远程跟踪分支git checkout -b master --track origin/master
相同的提交的本地master
,并将origin/master
设置为origin/master
的上游,所有这些都在One Big Do-什么意思下跌。
当你创建一个新的本地分支并且尚未向上游推送时,你的本地分支没有master
远程跟踪分支。 2 在这种情况下,你必须手动设置上游,或使用origin/whatever
:git push -u ...
基本上告诉-u
为您运行git push
(尽管它实际上都内置于C代码中,这一点)。
1 如果你坚持使用一个真正古老的Git(1.8.0之前版本),你必须使用git branch --set-upstream-to
,这很难做到,或git branch --set-upstream
,这也很难搞定。如果可能的话,升级到现代的Git版本。
2 这里的单词集合 - 如分支的名词,带有本地分支和远程跟踪分支等形容词的名词,以及像set-upstream-to和gerunds这样的动词,如跟踪 - 是相当不幸的。 Git术语,用一个很好的短暂的令人难忘的盎格鲁 - 撒克逊方式,而不是一些多音节的新词语,吮吸岩石。 3
3 或其他盎格鲁撒克逊人的选择。
答案 1 :(得分:0)
是的,它应该但是在它可以做之前你需要做一个git fetch
,以便git知道你当前的分支在远程分支后面。然后,当你做git status
时,你应该看到你的分支实际上落后了。
答案 2 :(得分:0)
要查看您前方或后方的提交数量,请使用:
$ git checkout # with no arguments
这仅适用于具有工作树的存储库。在裸存储库中,我使用脚本 - git-branch-status
的旧版本:
答案 3 :(得分:0)
git remote update
不能永久解决git status
的问题,但是它可以检查遥控器,并且易于记忆和键入。运行后,git status
告诉我我落后了。