手段が3つある。
よくやるやつ
A. PR「承認済みかつ、マージ済み」
# 切り替えと同期
$ git switch main
$ git pull --ff-only # リモートの変更をローカルに取り込む
$ git fetch -p # リモート追跡ブランチのうち、リモート側で消えたものを自動反映
# ローカル削除
# git branch --merged # 消してOK候補を確認
# git branch -vv # 追跡や ahead/behind も確認
# git branch -d <対応してたブランチ> # 候補なら削除
# squash等で -d が拒否 → 内容がmain入り済みを確認のうえ
# git branch -D <対応してたブランチ> # どうしても残す理由がなければ強制削除
# 削除予定リストを確認(mainにマージ済み・main/現在を除外)
git branch --merged main \
| sed 's/^\* //; s/^ //' \
| grep -vE '^(main|master)$'
# まずは“実行内容だけ表示”(ドライラン)
git branch --merged main \
| sed 's/^\* //; s/^ //' \
| grep -vE '^(main|master)$' \
| xargs -n1 -I{} echo git branch -d {}
# 上記で問題なければ削除実行
git branch --merged main \
| sed 's/^\* //; s/^ //' \
| grep -vE '^(main|master)$' \
| xargs -n1 -I{} git branch -d {}
# リモートからも削除
# $ git branch -r --merged origin/main # mainにマージ済みだから消しても良さそうなリモート追跡ブランチ
# $ git push origin --delete <対応してたブランチ> # リモートも削除して片付け。残っていると作業中?と誤解されちゃう
# $ git push origin --delete <対応してたブランチ> でたくさん出てた以下で消しちゃうのもあり。
# 削除予定リストを確認(origin/HEAD と origin/main は除外)
git branch -r --merged origin/main \
| sed 's/^ *//' \
| grep -v '^origin/HEAD' \
| grep -v '^origin/main$' \
| sed 's#^origin/##'
# まずは“実行内容だけ表示”(ドライラン)
git branch -r --merged origin/main \
| sed 's/^ *//' \
| grep -v '^origin/HEAD' \
| grep -v '^origin/main$' \
| sed 's#^origin/##' \
| xargs -n1 -I{} echo git push origin --delete {}
# 上記で問題なければ削除実行
git branch -r --merged origin/main \
| sed 's/^ *//' \
| grep -v '^origin/HEAD' \
| grep -v '^origin/main$' \
| sed 's#^origin/##' \
| xargs -n1 -I{} git push origin --delete {}
$ git fetch -p # リモート追跡ブランチのうち、リモート側で消えたものを自動反映
以下はやったことない
B. PR「承認済みだが、まだマージしてない」
Mainに取り込まれていない。
git switch main
git pull --ff-only
git fetch -p # 任意
# もう不要なら
git branch -vv
git branch -d <対応してたブランチ>
C. PR「未承認のまま、ローカルで main に取り込みたい」(運用次第でやる場合)
そこまで無理してやる必要ない
git switch main
git pull --ff-only
git merge --no-ff <対応してたブランチ>
git push