6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ブランチ名に脳死で「/」使ってたらコけた。実は「/」には意味があった話

Last updated at Posted at 2025-06-03

こんちくわ。

皆さんはGitってどれぐらい理解してますか??
私はずっと生粋の何となくスタイルなので、10分の1も理解してないです。コミット出来てプッシュできればそれでいいと思ってますし、後輩に教える時もそんな感じなので信頼が失墜しています。


私はここ1年、下記みたいなブランチ名を疑いもせず量産していました:

issueHoge/fuga
feature/login
bugfix/header

スラッシュって“モダン感”あるじゃないですか。知らんけど。

今まで実務ではケバブやスネークケース(update-iconsfeature_hoge)で命名してました。

しかしネットサーフィン中にスラッシュ区切りのブランチ命名をしてるサイトを見て「なにこれカッコいい☆彡」なんてふざけた印象を持ち、プライベートではもっぱらこの命名で脳死開発してました。

でも先日「issue94/2(issue94 の 2 周目ブランチっていう安直ネーミング)」を push したらコケました:

error: failed to push some refs to 'github.com:your-repo.git'
! [remote rejected] issue94/2 -> issue94/2 (cannot lock ref 'refs/heads/issue94/2': 'refs/heads/issue94' exists; cannot create 'refs/heads/issue94/2')

えっ、"cannot lock ref" とは?

私の脳内:「は?????」

英語をちゃんと読めばある程度察せるのですが
雑に言うと 「ファイルとして存在するのにフォルダも作ろうとしたら怒られた」 です。

Git「もうissue94がいるのに同名のフォルダ作れねえよ炙るぞてめえ」

私「す、すいやせん...」

Git はブランチ情報を .git/refs/heads/ 以下にパス階層として保存します。

feature/login  → .git/refs/heads/feature/login
bugfix/header  → .git/refs/heads/bugfix/header
``` :contentReference[oaicite:0]{index=0}  

なので、 issue94 というブランチ(=ファイル)がある状態で
issue94/2(=ディレクトリ+ファイル)を作ろうとすると
ファイルとして存在するブランチ名をディレクトリとして扱おうとしてしまい
「ファイルとフォルダがバッティングして無理!」と Git がキレるわけです。


...てか、階層の概念は/区切りの時点で察するべきでした。てへ。


試しにfeature/OOをいくつか量産してみます。

$ git branch
  develop
* feature/aa
  feature/bb
  feature/oo

そして.gitをlsで覗いてみると、

$ ls .git/refs/heads/
develop  feature/ 

$ ls .git/refs/heads/feature/
aa  bb  oo

一応エクスプローラ
image.png

こんな感じで確かにブランチが/区切りで階層化されてますね。


学びと対処法

  1. “親子”関係がかぶると作れない

    • 例:issue94 がいると issue94/2 は NG。
  2. どうしても issue94/2 が欲しい場合

    • issue94 を消す or リネーム (issue94-old)

      git branch -m issue94 issue94-old   # ローカル
      git push origin --delete issue94    # リモート
      
    • もしくはハイフン形式に変更 (issue94-2)

  3. そもそも最初から“親”をフォルダ化前提で作る

    • issue/94 のように カテゴリ先頭 を置くと、下にいくらでもぶら下げられる。

おまけ:おすすめ命名テンプレ

用途
機能追加 feature/user-login
バグ修正 bugfix/email-sending
緊急パッチ hotfix/critical-prod-bug
ドキュメント docs/readme-typo
タスク番号 task/issue-xx
issue issue/xx

まとめ

スラッシュはただのカッコ良さじゃなく内部構造に直結していた

これからは “なんとなくスラッシュ族” から “構造理解派スラッシュ使い” へクラスチェンジします。
そして怒られたら まずエラーメッセージ読む コレに尽きます。


なんとなくでGithubを使ってるので、今後もこういうボロは出続けるのでしょうね。
まあここらへんでも読み返したら少しは錆が抜けるでしょうか。

おわり。あーねむ

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?