Ecco uno approccio:
- utilizzare l'API GitHub per ottenere il capo del CSA per tutte le richieste di pull unite.
- Abbina questi SHA alle filiali locali.
se la testa di una filiale locale ha corrisponde a quello di un PR che è stata fusa, allora si può tranquillamente eliminarlo. Ciò funzionerà indipendentemente da come è stato unito il PR (fusione completa, avanzamento rapido, squash e unione).
Ho implementato questo approccio in uno script delete-squashed-branches. Ecco cosa utilizzo assomiglia:
(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
(. Gli avvisi possono essere ignorati dal momento che i rami sono state fuse sul master tramite Squash & unione)
Avvertenze:
- Avrai bisogno di
pip install pygithub
usare la sceneggiatura.
- Cerca i rami locali che sono stati uniti su
origin/(current branch)
. Quindi ti consigliamo di eseguirlo su master
, develop
o qualsiasi altro ramo di lavoro.
- Se si dispone di più diramazioni di lunga durata, questo approccio non funzionerà molto bene.
non esattamente affidabile ma 'git log --grep =" unione di $ BRANCH "' o qualcosa potrebbe funzionare, se si inserisce il nome del ramo nei messaggi di commit quando si esegue lo squash unione. –
Purtroppo, non inseriamo sempre il nome del ramo nei messaggi di commit quando eseguiamo l'unione di squash. – emilyxxie
Guadagni qualcosa schiacciando? Puoi sempre schiacciare prima rebase e poi fare una fusione normale. –