目前我的猜测是(我仍在等待git branch -vv
或git rev-parse --symbolic-full-name "@{u}"
的结果),您没有将origin/MyTestBranch
设置为MyTestBranch
的上游分支。
要将一个分支设置为当前分支的上游分支,使用以下命令:
git branch --set-upstream-to upstream
1
在这种情况下,该命令应扩展为:
git branch --set-upstream-to origin/MyTestBranch
要删除上游设置,请使用git branch --unset-upstream
。
存在或不存在上游设置主要影响git status
是否能够告诉您当前分支是否领先或滞后,以及git merge
和git rebase
是否需要额外的参数才能完成任务。因此,它基本上只是一个方便的设置。
通常情况下,当您首次检出分支时,上游会通过创建基于远程跟踪分支来自动设置。例如,在第一次执行git clone
时,Git 最终运行相当于:
git checkout master
即使您还没有master
,Git会发现您有origin/master
(没有其他的remote/master
,因此不存在要使用哪个远程的问题),并执行如下操作:
git checkout -b master --track origin/master
创建一个本地
master
分支,指向与远程跟踪分支
origin/master
相同的提交,并将
origin/master
设置为
master
的上游,所有这些都可以在一个大的操作中完成。
当您创建一个新的本地分支并且尚未将其推送到上游时,您的本地分支没有
origin/whatever
的远程跟踪分支需要跟踪。
2 在这种情况下,您必须手动设置上游,或使用
git push -u...
:
-u
基本上是告诉
git push
为您运行
git branch --set-upstream-to
(尽管实际上所有这些都已内置到C代码中)。
1如果您被困在真正古老的Git版本(早于1.8.0),则必须使用git branch --set-upstream
,这很难做对,或者使用git config
,这也很难做对。 如果可能的话,请升级到现代Git版本。
2这里的一组单词,如branch、local branch和remote-tracking branch等带有形容词的名词,以及像set-upstream-to和tracking之类的动词和动名词,都相当不幸。 用一种漂亮而简短、易记的英语-撒克逊方式来表达Git术语,而不是使用一些多音节的新词汇,这种方式很糟糕。3
3或者其他您选择的英语-撒克逊式强烈措辞的词语。
git rev-parse --symbolic-full-name "@{u}"
打印什么?(取决于您使用的 shell,您可能不需要引号。)或者,git branch -vv
显示什么? - torekgit pull origin MyTestBranch
吗? - Khairul Alam Licongit pull
。另一个技巧可能会有帮助,首先删除你本地的 MyTestBranch 分支。但请确保删除本地分支不会导致分支中的本地代码被误删。如果你认为你的源分支已经包含了最新的更改,那么你可以通过以下命令删除本地分支并从源分支再次检出:git checkout -b MyTestBranch origin/MyTestBranch
。 - Khairul Alam Licon