添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
[Git] ブランチを作成する際にcannot lock refと怒られて失敗することがある

[Git] ブランチを作成する際にcannot lock refと怒られて失敗することがある

ブランチを作成する際にfatal: cannot lock refと怒られる原因と対処法について紹介します。
Clock Icon 2023.06.26

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。サービス部の武田です。

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 switch -c feature/aaa Switched to a new branch 'feature/aaa' $ 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では feature/aaa のようにブランチ名に / が含まれている場合、内部的に refs/heads/ の下に同名のディレクトリを作成します。

実際に確認してみると、たしかにディレクトリが作成されています。

$ ls .git/refs/heads/* .git/refs/heads/main .git/refs/heads/feature: