Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t我的Git状态显示我是否';我和我的远程对手保持联系?_Git - Fatal编程技术网

为什么';t我的Git状态显示我是否';我和我的远程对手保持联系?

为什么';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

我尝试了一些更改,并将其推到GitHub上。我从另一台计算机上获取了更改。当我执行
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你当然有