1 つのアプローチを次に示します。
- GitHub API を使用して、マージされたすべてのプル リクエストの HEAD SHA を取得します。
- これらの SHA をローカル ブランチと照合します。
ローカル ブランチの HEAD が、マージされた PR の HEAD に対応している場合は、安全に削除できます。これは、PR がどのようにマージされたか (完全なマージ、早送り、スカッシュ、およびマージ) に関係なく機能します。
このアプローチをdelete-squashed-branchesスクリプトに実装しました。使い方はこんな感じです。
(master) $ git branch
delete-merged-prs
fixup
unmerged-branch
* master
(master) $ delete-squashed-branches
Finding local branches which were merged onto origin/master via GitHub...
warning: deleting branch 'delete-merged-prs' that has been merged to
'refs/remotes/origin/delete-merged-prs', but not yet merged to HEAD.
Deleted branch delete-merged-prs (was 325a42b).
warning: deleting branch 'fixup' that has been merged to
'refs/remotes/origin/fixup', but not yet merged to HEAD.
Deleted branch fixup (was e54f54b).
(master) $ git branch
unmerged-branch
* master
(ブランチは Squash & Merge を介して master にマージされているため、警告は無視できます。)
警告:
pip install pygithub
スクリプトを使用する必要があります。
- にマージされたローカル ブランチを探します
origin/(current branch)
。したがってmaster
、 、develop
または作業しているブランチで実行する必要があります。
- 存続期間の長いブランチが複数ある場合、このアプローチはうまく機能しません。