発生していた内容
Git リポジトリを変更するため origin を一度削除しようとした時に、以下のエラーが発生しました。
$ git remote remove origin
error: could not delete references: cannot lock ref 'refs/remotes/origin/feature/ticket-123': Unable to create '/path/to/project/.git/refs/remotes/origin/feature/ticket-123.lock': File exists.
原因
大文字と小文字の判別が Git とファイルシステムで差異があることが原因です。
例えば、下記2つのブランチが存在している場合:
feature/ticket-123
feature/TICKET-123
ファイルシステムでは、大文字小文字の違いを区別せずに同じファイルが存在しているとみなしています。
対応策
-
.git/packed-refs
を編集して、重複している ref を削除することで対応できます。
編集前:
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0 refs/remotes/origin/feature/ticket-123
b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1 refs/remotes/origin/feature/TICKET-123
c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2 refs/remotes/origin/feature/ticket-456
編集後:
a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0 refs/remotes/origin/feature/ticket-123
c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0u1v2 refs/remotes/origin/feature/ticket-456
Gitのブランチルールを徹底する、Gitのブランチをこまめに整理する、などで防げる内容かと思います。