git branch -d でブランチを削除できない(not fully merged)
削除対象ブランチのコミットが現在のブランチへ未マージのため、Git が安全装置で拒否しています。
マージ済みか確認し、本当に破棄してよいときだけ -D で強制削除します。
公開:
要約
error: The branch 'feature' is not fully merged. は、削除対象ブランチのコミットが現在チェックアウト中のブランチへ取り込まれていないときに出る安全装置です。
未マージの作業を失わないための警告なので、まずマージ状況を確認し、破棄してよいと判断したときだけ強制削除します。
よくある原因
- 本当に未マージ:
featureの変更がmainに取り込まれておらず、-dが誤削除を防いでいる。 - 比較対象のズレ: 現在のブランチが
mainでなく別ブランチで、そこから見ると未マージに見える。 - 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 で失って困る作業が無いか必ず確認してください。
実行例
実際に alpine/git 環境(Git 2.52.0)で上記の手順を走らせると、git branch -d feature が終了コード 1 で未マージを検知して削除を拒否する安全装置として機能し、その後 git branch -D feature による強制削除が終了コード 0 で完了する流れを確認できます。
== versions ==
git version 2.52.0
== run ==
--- git branch --merged (feature は含まれない想定)---
* master
--- git branch -d feature (not fully merged を想定)---
error: the branch 'feature' is not fully merged
hint: If you are sure you want to delete it, run 'git branch -D feature'
hint: Disable this message with "git config set advice.forceDeleteBranch false"
終了コード: 1
--- git log <base>..feature で未マージのコミットを確認 ---
19528a0 feature work
--- 破棄してよいと確認できたので -D で強制削除 ---
Deleted branch feature (was 19528a0).
終了コード: 0
--- git branch (feature が消えていることを確認)---
* master— 2026-06-06 時点の出力