警告:リモートHEADは存在しない参照を参照しており、チェックアウトできません


87

これは、さまざまな原因でよくあるエラーのようです。

「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リポジトリであったことを知ることはおそらく興味深いでしょう。

追伸:gitwebを使用してベアリポジトリを参照すると、明らかにそこにmasterブランチがあります:http://kipdola.be/gitweb/?p = kiflea.git; a = summary


2
何がgit ls-remote origin表示されますか?
CBベイリー

checkout masterビットの前後で同じです:25f600739343a7ce32d6311a1e6140870774810b refs/heads/master
skerit 2012

1
リモートリポジトリがそのを失った(または一度も持っていなかった)ようHEADです。直接アクセスできますか?もしそうなら、見るこちら
CBベイリー

1
リポジトリのクローンを作成し、ブランチを指定しない場合、リポジトリはリモートヘッドを使用しようとします。以下の回答で説明されているように、どのブランチに直接影響を与えることはできません。ただし、クローン時に別のブランチをチェックアウトすることで、このチェックを回避できます。:あなたのケースでは、マスタが存在しますが、どこか他のリモートヘッドのポイントは、使用しているようだgit clone -b master <url> <dir>
eckes

回答:


128

これ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のデフォルトブランチ)、ブランチ名を使用する必要があることです。masterデフォルトのブランチとして(それがそのシンボリック参照のデフォルト値であるため)。

リモートgitリポジトリへのシェルアクセスがある場合は、デフォルトで使用するブランチ名をcd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZどこに置くかを簡単に指定できXYZます。

この問題を解決する1つの方法は、コミットなしで新しいリモートベアリポジトリを作成してから実行git push name-of-the-remote my-special-branch-nameすることです。これにより、ベアリポジトリに単一のブランチmy-special-branch-nameHEAD含まれますが、シンボリックrefにはまだを指すデフォルト値が含まれますmaster。その結果、前述の警告が表示されます。


20
警告は、gitが実行しなかったことを意味するだけであることに注意してくださいcheckout。それ以外の場合、クローンリポジトリは問題ありません。git branch -a考えられるブランチを確認しgit checkout the-branch-you-want、問題を「修正」するために実行してください。
Mikko Rantalainen 2013年

2
少なくとも1つは、使用時にリモートヘッドの使用を回避できますgit clone -b master(または既存のブランチの名前は何でも)。
eckes 2014

私はあなたが最後の段落で書いたことを正確に行いました。ベアリポジトリ(gitlab内)のブランチにファイルがありますが、クローンは空のようです。{git branch-a}は何も表示しません。{git clone -b my-special-branch-name <url>}も機能していないようです(リモートエンドがハングアップしました)。
エド・ランドール

refs / remotes / my-special-branch-nameをrefs / headsにコピーし、(裸のgitlabリポジトリで)一致するようにHEADを編集することで、これを「修正」しました。その後、-bmy-special-branch-nameを使用して正常にクローンを作成できました。しかし、クローン-bで問題が発生しないように、「init」/「push」サイクルの後にベアエンプティリポジトリを構成する正しい方法は何ですか?
エド・ランドール

1
@EdRandallcd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZどこXYZあなたがあれば使用したいデフォルトブランチ名であるgit cloneなしに行われる-bフラグ。他に問題がある場合は、コメントとして質問を追加するのではなく、新しい質問をしてください。
ミッコランタライネン2015年

10

masterブランチを使用しなくなったため、同じ問題が発生し、ローカルリポジトリとリモートリポジトリの両方で失われました。

リモートリポジトリはまだにHEAD設定されていましたが、master実際に使用しているリモートブランチの1つに変更しましたが、すべて正常に動作します。

リモートリポジトリにアクセスできる場合:

  • あなたのに行きますremote_repo.git;
  • HEADファイルの編集
  • 変更ref: refs/heads/masterref: refs/heads/your_branch

両方の条件が可能であり、マスターが削除され、HEADがまだそれを指しているか、HEADがブランチに変更されて後で削除されました。(マスターワークのチェックアウトなので)2番目のオプションは私たちの場合だと思います。@MarcoBonifaziその場合、「変更」は。に置き換えるbroken_branchことrefs/heads/masterです。
eckes 2014

2
ファイルの編集に頼らずに、このようにHEADブランチを設定する「適切な」方法はありますか?
エド・ランドール

@EdRandallあなたがあれば使用したいデフォルトのブランチ名がされずに行われていますcd path/to/bare/git/repo; git symbolic-ref HEAD refs/heads/XYZXYZgit clone-b、私は別のコメントで言ったように、フラグが。
ミッコランタライネン2015年

7

はい、これはマスターとは異なるブランチをチェックアウトしようとしているgitクローンに関連しています。これを行うだけです

git clone user@git-server:project_name.git -b branch_name /some/folder

これは、ブランチ名を介して正確なブランチのクローンを作成するのに役立ちます。


2

このエラーが表示された場合でも(プロジェクトは対応するリポジトリに接続されていました)、git branchコマンドを実行して適切なブランチを確認しました。次に実行git checkout *branchnameしてBOOMを実行しました。すべて問題ありませんでした。


はい、@ Mikkoはその理由を説明しました。チェックアウトをスキップする場合は、-bオプションを使用できます。(ただし、長期的にはリモートリポジトリを修正することをお
勧めし

1

リモートリポジトリに間違いなく問題があります。リポジトリの新しいクローンを作成することで修正できる場合があります。また、マスターブランチに新しいコミットをプッシュすることも機能する可能性があります。


gitpush

1

*どういうわけかリモートサーバーをだましているのは、コミットログの先頭だと思います。

いくつかのメニューリンクを使用してリポジトリのWebインターフェイスを参照できますが404 - Unknown commit object、特に概要ページから、または同様のもので失敗するものもあります。

最後のコミットメッセージを修正できるかどうかを確認してから、更新を強制的にプッシュして、修正されるかどうかを確認します。サーバーデーモンにバグがある可能性があります。それが修正された場合は、gitリストgit@vger.kernel.orgで報告する価値があります(プレーンテキストメッセージのみ)


1

ベアリポジトリを作成するときに同じ問題が発生しました。

リポジトリのクローンを作成し、ローカルマスターブランチを作成してから、マスターをリモートリポジトリにプッシュするだけで解決しました。

1)リポジトリのクローンを作成します

$ git.exe clone --progress -v "the remote path" "my local path"

2)ローカルでマスターブランチを作成します。

   $ git checkout -b master

3)ローカルブランチで何かをコミットする

$ git add readme.md 
$ git commit –m “Added readme”

4)リモートでローカルマスターをプッシュします

   $ git push origin master

0

実際に使用可能なマスターブランチがない場合は、以下を確認してください。'.git'フォルダー内に 'packed-refs'という名前のファイルがある場合は、それを開くと、リストされているすべての参照を見つけることができます。

以下のようなもの。

# pack-refs with: peeled fully-peeled 
e7cc58650190bd28599d81917f1706445d3c6d8b refs/tags/afw-test-harness-1.5
^cfae4f034e82591afdf4e5ed72279297d0eee618
6afe1bcfa4bd74de8e0c8f64d024e1cc289206df refs/tags/afw-test-harness-2.1
^c32f7fa495d4b44652f46c065fcd19c3acd237a6
72f2e4284dfbf27c82967da096c6664646bbdd19 refs/tags/android-1.6_r1
^50992e805e758e2231f28ec2127b57a1a9fd0ddc
0cbd528cad1cee9556098b62add993fc3b5dcc33 refs/tags/android-1.6_r1.1

次に、を使用します。

git checkout refs/tags/xxxx

または

git checkout 'HASH value'

必要なバージョンをチェックアウトします。ありがとうございました。


0

私はそれを次のように修正したようです:

git checkout -b  master
git push

これによりデフォルトのマスターが作成され、他のブランチをチェックアウトできるようになりました


0

私の場合、レポは空でした。

git checkout --orphan master

git add some_file
git commit -m 'init'
git push origin master 

0

Gitlabの場合、デフォルトのブランチ(たとえばmaster)にいることを示していても、実際にはそのブランチにいない可能性があります。もう一度設定すると、次のように修正されます。

  1. おそらく、新しいブランチを作成します asd
  2. 設定>リポジトリ>デフォルトブランチ。デフォルトブランチは master
  3. に設定します asd
  4. に戻す master
  5. asdブランチを削除する

完了しました。デフォルトのブランチは master

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.