我试过做一些改动,把它推到了Github.从另一台计算机上,我获取了这些变化.当我这样做时git status,它会报告:
On branch MyTestBranch
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为我确信已经有了变化.我甚至可以合并那些提取的更改!
事实上,当我去了我朋友的电脑并做了一个时git status,我可以看到:
Your branch is behind 'origin/MyTestBranch' by 1 commit, and can be fast-forwarded.
Run Code Online (Sandbox Code Playgroud)
但是为什么Git报告的事情不像我的origin/MyTestBranch未来有多少提交或者我的分支是否是最新的origin/MyTestBranch?
tor*_*rek 24
我在这一点上的猜测(我还在等待git branch -vv或git rev-parse --symbolic-full-name "@{u}"结果)是你没有origin/MyTestBranch设置为上游MyTestBranch.
要将分支设置为当前分支的上游,请使用:
git branch --set-upstream-to upstream1
在这种情况下扩展到:
git branch --set-upstream-to origin/MyTestBranch
Run Code Online (Sandbox Code Playgroud)
要删除上游设置,请使用git branch --unset-upstream.
上游设置的存在与否主要影响是否git status可以告诉你,如果你超前和/或落后,以及是否git merge和git rebase可以与任何其他参数做他们的工作.所以它基本上只是一个便利设置.
通常,当您首次通过git checkout基于远程跟踪分支创建分支来检出分支时,会自动设置上游.例如,在你的第一个git clone,Git运行,最后,相当于:
git checkout master
Run Code Online (Sandbox Code Playgroud)
即使你还没有master.然后Git发现你有origin/master(并且没有其它的,remote/master因此不存在使用哪个遥控器的问题),并且相当于:
git checkout -b master --track origin/master
Run Code Online (Sandbox Code Playgroud)
它创建了本地master指向与远程跟踪分支相同的提交origin/master,并设置origin/master为上游master,所有这些都在One Big Do-What-I-Mean Fell Swoop中.
当您创建新的本地分支并且尚未将其推送到上游时,您的本地分支没有跟踪的远程跟踪分支.2 在这种情况下,你必须手动设置上游,或者使用:基本上告诉你为你运行(虽然它实际上都内置在C代码中,此时).origin/whatevergit push -u ...-ugit pushgit branch --set-upstream-to
1如果你坚持使用一个真正古老的Git(1.8.0之前的版本),你必须使用git branch --set-upstream,这对于正确行事来说很棘手,或者git config,这也很难做到.如果可能的话,升级到现代的Git版本.
2这里的单词集合 - 像分支这样的名词,带有本地分支和远程跟踪分支等形容词的名词,以及像上游一样的动词和像跟踪这样的动词,这是非常不幸的.Git术语,用一个很好的短暂的令人难忘的盎格鲁撒克逊方式,而不是一些多音节的新词语,吮吸岩石.3
3或其他盎格鲁撒克逊人的选择.
是的,应该如此,但在执行此操作之前,您需要执行 a 操作,git fetch以便 Git 知道您当前的分支位于远程分支之后。然后当你执行 a 时,git status你应该会看到你的分支实际上落后了。
| 归档时间: |
|
| 查看次数: |
5521 次 |
| 最近记录: |