为什么我的Git状态并不能告诉我我是否与我的远程对手保持同步?

时间:2016-06-07 01:48:46

标签: git

我尝试过进行一些更改,将其推送到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保持同步?

4 个答案:

答案 0 :(得分:22)

我此时的猜测(我还在等待sortedgit 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 statusgit 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/whatevergit 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告诉我我落后了。