29

次のようにして、現在の Git ブランチの名前に一致するリモート ブランチにプッシュおよびプルできると教えられました。

git push origin HEAD

また

git pull origin HEAD

以前は常に機能していましたが、奇妙に機能しない場合があり、代わりにマスターブランチからのプッシュ/プルを延期します(これにより、プル時にマージが発生します...私がやりたいことではありません)。次のようなブランチの名前を使用するだけで、現在のブランチから簡単にプッシュ/プルできることを私は知っています:

git pull origin name-of-branch-i-want-to-pull-from

とにかく

  1. ほとんどの場合のように、HEAD が追跡を失っている/現在のブランチを指していない理由はありますか?
  2. コマンドでブランチに明示的に名前を付けずに、現在作業しているブランチにプッシュ/プルする方法はありますか (リモート ブランチの名前が一致する限り)。
4

3 に答える 3

7

@abackstrom による深刻な支援のおかげで、問題を解決することができました。基本的に、この投稿は私の問題であり、解決策でした:

origin/HEAD という名前の Git ブランチ -> origin/master

ローカル HEAD ブランチ/ポインターを正しく「再作成」/追跡する正確なコマンドは次のとおりです。

git remote set-head origin -a

これが、この問題に遭遇した他の誰かに役立つことを願っています。

于 2012-11-15T22:29:31.120 に答える
6

HEAD は実際にはブランチではありません。git checkout <sha>これは、現在チェックアウトしているコミットへのポインターであり、ブランチを参照することがよくありますが、またはのようなことを行うとgit checkout <tag>、HEAD はブランチに結び付けられずにコミットを直接参照します。これは「切り離された HEAD」と呼ばれます。通常、このような状態に入ると警告が表示されgit checkoutます。その状態では、HEAD をプッシュ/プルしようとしても意味がありません。なぜなら、あなたはブランチ上にいないからです。

于 2012-09-21T15:47:11.837 に答える
6

問題は、次の場合です。

git push origin HEAD

HEADここでは、ローカルリポジトリのデフォルト ブランチを意味します。

ただし、次の場合:

git pull origin HEAD

HEADhere は、リモートリポジトリのデフォルト ブランチを意味します。

これら 2 つの HEAD は同じブランチ名を持つことができますが、多くの場合、それらは異なります。

たとえば、ローカル リポジトリとリモート リポジトリのデフォルト ブランチが両方ともmasterである場合、ローカル リポジトリの新しいブランチに切り替えてから、 を実行featureしてリモートにプッシュしても、リモートのデフォルト ブランチは魔法のようgit push origin HEADに変更されません。feature代わりに にとどまりmasterます。この時点で、git pull origin HEADフィーチャー ブランチで行う場合、実際にはgit pull origin master.

したがってgit pull origin HEAD、リモートにあるデフォルトのブランチが何であるかが明らかではなく、予期しない問題を引き起こす可能性があるため、実行しないことをお勧めします。

于 2020-11-16T16:42:22.443 に答える