1. ホーム
  2. git

[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。

2022-02-01 02:58:30

質問

原因が違うのによくあるエラーのようです。

私は "kiflea.git" というシンプルなベア git リポを持っていて、それをこのようにクローンしているのです。

git clone git://kipdola.be/kiflea.git

すると、gitが教えてくれる。 warning: remote HEAD refers to nonexistent ref, unable to checkout.

そして、そうです。マップには、.gitディレクトリを除いて、バージョン管理されたファイルはありません。 とにかく、必要なのは

cd kiflea
git checkout master

そして、それは動作し、すべてのファイルがそこにあります。 しかし、レポのクローンは自動的にマスターをチェックアウトすると思っていたのですが、一体何が起こっているのでしょうか、そしてどうすればそれを修正できるのでしょうか?

を実行した後、気がついたのですが git checkout master ビットを使用すると、ローカルの .git 設定ファイルに追加されます。

[branch "master"]
    remote = origin
    merge = refs/heads/master

このgitリポジトリが、遠い昔はsvnリポジトリだったというのも面白いかもしれませんね。

Ps: gitweb を使ってベアリポジトリをブラウズすると、明らかに master ブランチがあります。 http://kipdola.be/gitweb/?p=kiflea.git;a=summary

解決方法

その warning: remote HEAD refers to nonexistent ref, unable to checkout. は、リモート(裸の)リポジトリに ブランチリファレンス というファイルでは HEAD を、同じリポジトリ内のどの公開ブランチにも一致しない値で指定します。

この警告は、git がチェックアウトを行わなかったことを意味するだけであることに注意しましょう。クローンしたリポジトリは、それ以外の点ではまったく問題ありません。 を行うだけです。 git branch -a で可能なブランチを確認し git checkout the-branch-you-want を実行し、問題を回避してください。

この現象は、通常、デフォルトの 内容 は、そのファイル ( .git/HEAD またはプレーンな HEAD は、ベアリポジトリの場合) は ref: refs/heads/master これは、もし誰かが clone このリポジトリは、デフォルトでは、ブランチ refs/heads/master . デフォルトでは、Git はローカルブランチを作成する際に refs/heads/ の接頭辞があります(つまり master をデフォルトで使用します)。試す git help symbolic-ref をご覧ください。

この状況での問題は、Git が リモート シンボリックリファレンスを使うには、Git ホスティングプロバイダーが実装している方法 (たとえば GitHub の Settings - Default branch は、管理者権限を持っている場合) を使うか、あるいはブランチ名 master をデフォルトブランチとして指定します (これは、ファイル HEAD であり、そのファイルを修正できない場合は master 永遠に)。

リモートの git リポジトリにシェルでアクセスできる場合は、単純に cd path/to/git/repo; git symbolic-ref HEAD refs/heads/XYZ ここで XYZ は、デフォルトで使用したいブランチ名です。

この問題を解決するひとつの方法として、コミットしていないリモートベアリポジトリを新規に作成して git push name-of-the-remote my-special-branch-name これは、単一のブランチを含むベアリポジトリになります。 my-special-branch-name しかし HEAD を指すデフォルトの値が含まれています。 master . その結果、前述のような警告が表示されます。もし、リモートの HEAD ファイルでは、ブランチを公開することができます。 git push name-of-the-remote my-special-branch-name:master というローカルブランチは my-special-branch-name はブランチとして公開されるべきです master をリモートで実行します。