为什么';t我的Git状态显示我是否';我和我的远程对手保持联系?
我尝试了一些更改,并将其推到GitHub上。我从另一台计算机上获取了更改。当我执行为什么';t我的Git状态显示我是否';我和我的远程对手保持联系?,git,Git,我尝试了一些更改,并将其推到GitHub上。我从另一台计算机上获取了更改。当我执行git status时,它会报告以下内容: On branch MyTestBranch nothing to commit, working directory clean 这是很奇怪的,因为我确信有更改被获取。我甚至可以将这些更改合并到一起 事实上,当我走到我朋友的电脑前,做了一个git status(git状态),我可以看到: Your branch is behind 'origin/MyTestBran
git status
时,它会报告以下内容:
On branch MyTestBranch
nothing to commit, working directory clean
这是很奇怪的,因为我确信有更改被获取。我甚至可以将这些更改合并到一起
事实上,当我走到我朋友的电脑前,做了一个git status(git状态),我可以看到:
Your branch is behind 'origin/MyTestBranch' by 1 commit, and can be fast-forwarded.
但是为什么Git不报告类似my
origin/MyTestBranch
的内容是前面有多少次提交,或者我的分支是否是最新的origin/MyTestBranch
?是的,它应该这样做,但是在它可以这样做之前,您需要执行一个Git fetch
,以便Git知道您当前的分支在远程分支后面。然后,当您执行git状态时
您应该看到您的分支实际上落后了。若要查看您前面或后面的提交数量,请使用:
$ git checkout # Without any arguments
这仅适用于具有工作树的存储库。在裸存储库中,我使用了一个旧版本的脚本。我的猜测是(我仍然在等待git branch-vv
或git rev parse--symbol full name“@{u}”
results)您没有将origin/MyTestBranch
设置为MyTestBranch
的上游
要将分支设置为当前分支的上游,请使用:
git分支——将上游设置为上游
1
在这种情况下,扩展到:
git branch --set-upstream-to origin/MyTestBranch
要删除上游设置,请使用git branch--unset upstream
上游设置的存在与否主要影响git status
是否可以告诉您是领先还是落后,以及git merge
和git rebase
是否可以在没有其他参数的情况下完成其工作。所以这基本上只是一个方便的设置
通常,当您第一次签出分支时,通过让git checkout
基于远程跟踪分支创建分支,会自动设置上游。例如,在您的第一个git克隆上
,git在最后运行,相当于:
git checkout master
git checkout -b master --track origin/master
即使您还没有master
。Git随后发现您拥有源站/master
(并且没有其他远程/master
,因此不存在使用哪个远程的问题),并执行以下等效操作:
git checkout master
git checkout -b master --track origin/master
它创建本地master
,指向与远程跟踪分支origin/master
相同的提交,并将origin/master
设置为master
的上游,所有这一切都在一次大规模的“我的意思是什么”的突然行动中完成
当您创建一个新的本地分支并且尚未将其推送到上游时,您的本地分支无法跟踪origin/whatever
远程跟踪分支。2在这种情况下,您必须手动设置上游,或者使用gitpush-u…
:-u
基本上告诉gitpush
运行git分支——为您将上游设置为
(尽管此时它实际上都内置于C代码中)
1如果您使用的是真正古老的Git(1.8.0之前),则必须使用
Git分支--设置上游,这很难正确操作,或者使用Git配置
,这也很难正确操作。如果可能的话,升级到现代Git版本
这里的一组词,名词如branch,带有形容词的名词如local branch和remote tracking branch,动词如set upstream to和动名词如tracking,都是相当不幸的。Git术语,用一种简单易记的盎格鲁-撒克逊人的方式来代替一些多音节的新词短语,简直糟透了
3或其他盎格鲁-撒克逊人喜欢的词。git remote update
没有永久性地解决git status
的问题,但它会检查远程设备,并且易于记忆和键入。运行之后,git status
告诉我我落后了。我理解这一点。正如我所提到的,我已经完成了一个git fetch
,并且我可以看到正在进行的更改。但是,当我执行一个git状态时,它不会告诉我是否在远程分支的后面(git rev解析什么——符号全名“@{u}”
print?(您可能不需要引号,这取决于您使用的shell。)或者,git branch-vv
显示了什么?您是否尝试了git pull origin MyTestBranch
?@licon我没有执行pull。我先执行了一个fetch,然后是一个git状态,但很惊讶它没有显示我落后于1个commit。@torek,我实际上已经合并了该分支。这些命令还会是accur吗ate?是的,虽然如果你完成了合并,你现在将是最新的,直到其他事情发生变化。非常感谢!!我发现这确实与设置上游有关。一旦我这样做了,现在一切都很好!奇怪的是,当我第一次克隆回购协议时,它没有设置上游。关键在于你如何创建本地分支。如果您允许git checkout基于远程跟踪分支创建它,git将该本地分支设置为跟踪相应的远程跟踪分支。如果不允许,则如果您创建本地分支,它将不会跟踪远程跟踪分支,即使远程跟踪分支存在,除非您使用--track
或以其他方式请求跟踪远程跟踪分支的初始化。(明白我的术语是什么意思了吗?git分支--设置上游到上游
给了我一个“未知选项”错误。我相信你的意思是git分支--设置上游
@evt:这意味着你有一个非常旧的git版本(1.8.0之前).--set upstream to
是不推荐使用的--set upstream
选项的替换/更正。有关详细信息,请参阅。对我不起作用,git checkout
表示一切正常,然后git pull
拉下了一堆updates@Romell你当然有