できない.dev

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

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

公開: 更新:

実行例あり(2026-08-02 に実環境で検証)

要約

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 で失って困る作業が無いか必ず確認してください。

実行例

実際に alpine/git 環境(Git 2.52.0)で上記の手順を走らせると、git branch -d feature が終了コード 1 で未マージを検知して削除を拒否する安全装置として機能し、その後 git branch -D feature による強制削除が終了コード 0 で完了する流れを確認できます。

$ git branch --merged
* master
$ git branch -d feature
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 --oneline master..feature
f20acd0 feature work
$ git branch -D feature
Deleted branch feature (was f20acd0).
終了コード: 0
$ git branch
* master

— 2026-08-02 時点の出力

検証環境

検証日
実行環境
alpine/git

この記事の「実行例」は、上記の環境で実際にコマンドを実行して得られた出力をそのまま掲載しています。 再現手順はリポジトリの検証スクリプトとして管理し、定期的に再実行して出力を更新しています。

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