![[Git] ブランチを作成する際にcannot lock refと怒られて失敗することがある](https://devio2023-media.developers.io/wp-content/uploads/2023/05/eyecatch_Git_1200x630.jpg)
[Git] ブランチを作成する際にcannot lock refと怒られて失敗することがある
こんにちは。サービス部の武田です。
Gitを使用しているとブランチの作成は意識しなくても指が勝手に動くのではないでしょうか。さてそんなブランチ作成ですが、作成に失敗した経験はありますか?
たとえば次のようにブランチを作ってみます。何の問題もありません。
$ git switch -c feature/aaa/bbb Switched to a new branch 'feature/aaa/bbb'ところがある環境だとこのコマンドは失敗します。具体的には次のようなエラーメッセージが出ます。
$ git switch -c feature/aaa/bbb fatal: cannot lock ref 'refs/heads/feature/aaa/bbb': 'refs/heads/feature/aaa' exists; cannot create 'refs/heads/feature/aaa/bbb'ちなみにすでに存在するブランチ名で作成しようとすると次のようなメッセージが出ます。そのため上記のエラーはこれとは原因が異なります。
$ git switch -c feature/aaa fatal: a branch named 'feature/aaa' already exists今回の原因
このエラーを再現するには、まず
feature/aaa
ブランチを作成し、その後で
feature/aaa/bbb
ブランチを作成しようとします。
Gitでは
feature/aaa
のようにブランチ名に
/
が含まれている場合、内部的に
refs/heads/
の下に同名のディレクトリを作成します。
実際に確認してみると、たしかにディレクトリが作成されています。
$ ls .git/refs/heads/* .git/refs/heads/main .git/refs/heads/feature: