【Git】warning: remote HEAD refers to nonexistent refと表示されたら

- プログラミング -
2019.12.06
git cloneのエラー

git cloneした時、こんなエラーが出て怒られました。

$ git clone ssh://xxx@yyyy:zzz/home/repos/temp/repos.git
Cloning into 'repos'...
remote: Counting objects: 9244, done.
remote: Compressing objects: 100% (6956/6956), done.
remote: Total 9244 (delta 2093), reused 8880 (delta 1872)
Receiving objects: 100% (9244/9244), 134.45 MiB | 4.23 MiB/s, done.
Resolving deltas: 100% (2093/2093), done.
warning: remote HEAD refers to nonexistent ref, unable to checkout.

初めて遭遇したエラーだったので、解決までの道のりをメモしておきます。

warning: remote HEAD refers to nonexistent ref エラーの解消方法

※リモートリポジトリの載っているサーバ側で作業するのでSSH接続をしている前提です

とりあえずリポジトリのディレクトリまで移動します。

[test@test ~]$ cd home/xxx/repos.git/

HEADというファイルがあるので中身を確認してみる。

[test@test repos.git]$ ls
HEAD branches config description hooks info objects refs

[test@test repos.git]$ cat HEAD
ref: refs/heads/master

ここで、refs/heads配下に"master"とある点に注目。

ではそのrefs/heads配下を見ると、

[test@test repos.git]$ ls refs/heads/
dev_master

dev_masterという名前のブランチだけしかありません。先ほどHEADが参照していたのは ref: refs/heads/master でした。

これが読んで字のごとく "HEAD refers to nonexistent ref(存在しないrefを参照してますよ)" のエラー、の正体ということでした。

refs/heads/master を、実際に存在する refs/heads/dev-master に修正してやれば良さそうです。以下、dev_masterの部分は適宜環境に合わせて変えてください。

[test@test repos.git]$ git symbolic-ref HEAD refs/heads/dev_master
[test@test repos.git]$

これで、

[test@test repos.git]$ cat HEAD
ref: refs/heads/dev_master

master から dev_master へ変わっています。大丈夫そうですね。

この状態でもう一度git cloneをしてみると無事怒られることなく成功しました。

参考サイトQiita:Git リモートリポジトリのHEADのブランチを変更する