我被告知你可以通过以下方式从与当前Git分支名称匹配的远程分支推送和拉出:
git push origin HEAD
或
git pull origin HEAD
它之前总是对我有用,但奇怪的是它有时不起作用,而是推迟从主分支推送/拉动(这导致合并拉...不是我的想做)。我知道你可以通过简单地使用分支的名称轻松地从你所在的分支推/拉:
git pull origin name-of-branch-i-want-to-pull-from
反正:
答案 0 :(得分:4)
HEAD不是真正的分支。它是指向您当前已签出的提交的指针,并且通常会引用分支,但如果您执行git checkout <sha>
或git checkout <tag>
之类的操作,则HEAD会直接引用提交,但不会绑定到分支 - 这被称为&#34;分离的HEAD&#34;状态,当你进入这种状态时,通常应该从git checkout
收到警告。在那种状态下,尝试推/拉HEAD是没有意义的,因为你不在分支上。
答案 1 :(得分:3)
感谢@abackstrom的一些认真帮助,我能够解决我的问题。 基本上,这篇文章是我的问题和解决方案:
Git branch named origin/HEAD -> origin/master
正确“重新创建”/跟踪本地HEAD分支/指针的确切命令是:
git remote set-head origin -a
我希望这可以帮助遇到这个问题的其他任何人。
答案 2 :(得分:0)
问题是,当您这样做时:
git push origin HEAD
HEAD
表示您的本地存储库中的默认分支。
但是,当您这样做时:
git pull origin HEAD
HEAD
表示远程存储库中的默认分支。
这两个HEAD可以具有相同的分支名称,但是通常它们是不同的。
例如,如果本地存储库和远程存储库的默认分支都是master
,则您切换到本地存储库上的新分支feature
,然后通过执行{{ 1}},远程的默认分支不会神奇地更改为git push origin HEAD
。相反,它将停留在feature
。此时,如果您在功能分支上执行master
,则实际上是在执行git pull origin HEAD
。
因此,我建议避免执行git pull origin master
,因为远程分支上的默认分支并不明显,并且可能导致意外问题。