できない.dev

git branch -d でブランチを削除できない(not fully merged)

削除対象ブランチのコミットが現在のブランチへ未マージのため、Git が安全装置で拒否しています。
マージ済みか確認し、本当に破棄してよいときだけ -D で強制削除します。

#git#branch#delete#not-merged#cleanup

要約

error: The branch 'feature' is not fully merged. は、削除対象ブランチのコミットが現在チェックアウト中のブランチへ取り込まれていないときに出る安全装置です。
未マージの作業を失わないための警告なので、まずマージ状況を確認し、破棄してよいと判断したときだけ強制削除します。

よくある原因

  1. 本当に未マージ: feature の変更が main に取り込まれておらず、-d が誤削除を防いでいる。
  2. 比較対象のズレ: 現在のブランチが main でなく別ブランチで、そこから見ると未マージに見える。
  3. squash / rebase マージ: PR を squash マージするとコミット ID が変わり、Git はマージ済みと判定できない。

解決策

1. マージ済みか確認する

まず削除して安全かを確かめます。

git checkout main
git branch --merged       # ここに出れば main へマージ済み
git log main..feature     # 空ならコミットは取り込み済み

git branch --merged の挙動は公式ドキュメントに定義されています。

2. マージしてから通常削除する

未マージで内容が必要なら、先にマージします。

git checkout main
git merge feature
git branch -d feature     # マージ済みなので -d で消える

3. 破棄してよいなら強制削除する

squash マージ後など、変更が反映済みでブランチだけ残っている場合は強制削除します。

git branch -D feature

-D--delete --force の短縮で、未マージのコミットも消えます。
実行前に git log feature で失って困る作業が無いか必ず確認してください。

この記事は役立ちましたか?