¿Es posible filtrar las twigs fusionadas en git for-each-ref?

Básicamente, quiero algo similar a git branch -a --no-merged pero también me gustaría listr tags y no necesito los espacios antes o cosas como remotes/origin/HEAD -> origin/master

¿Puedo hacer esto con for-each-ref o es mejor simplemente quitar las cosas que no quiero de git branch luego get las tags por separado?

git for-each-ref y el progtwig similar git show-ref no tienen la capacidad de decidir si una reference es un antecesor de otra, pero siempre puedes build una canalización, por ejemplo:

 uninteresting=master # or some other way to identify ones to discard git for-each-ref | while read sha1 reftype refname; do if git merge-base --is-ancestor $refname $uninteresting; then # $refname / $sha1 "is merged", or is exactly equal ... do whatever you like here ... else # there is no ancestry path from $uninteresting back to $refname ... do whatever else you like here ... fi done 

Tenga en count que git merge-base --is-ancestor master master siempre es verdadero. Si no quiere que "igual pero el nombre difiera" se considere "fusionado" (¿y esto depende de si es una sucursal o algún otro tipo de ref?) Necesitará aquí un código adicional, pero sospecho que sí quiere " medios iguales fusionados ".

En realidad, comenzando con el próximo git 2.7 (Q4 2015), git for-each-ref , apoyará la --no-merged , lo que permite un filter fácil de las twigs fusionadas

 git for-each-ref --no-merged master refs/heads/ 

Con el doc:

 --no-merged [<object>]: 

Solo haga una list de references cuyas sugerencias no sean alcanzables desde la confirmación especificada (HEAD si no se especifica).


Consulte commit 4a71109 , commit ee2bd06 , commit f266c91 , commit 9d306b5 , commit 7c32834 , commit 35257aa , commit 5afcb90 , …, commit b2172fd (07 Jul 2015), y commit af83baf (09 Jul 2015) por Karthik Nayak ( KarthikNayak ) .
(Fusionado por Junio ​​C Hamano – gitster – in commit 9958dd8 , 05 de octubre de 2015)

Algunas características de " git tag -l " y " git branch -l " se han puesto a disposition de " git for-each-ref " para que, finalmente, la implementación unificada se pueda compartir entre las tres, en una serie de seguimiento o dos .

 * kn/for-each-tag-branch: for-each-ref: add '--contains' option ref-filter: implement '--contains' option parse-options.h: add macros for '--contains' option parse-option: rename parse_opt_with_commit() for-each-ref: add '--merged' and '--no-merged' options ref-filter: implement '--merged' and '--no-merged' options ref-filter: add parse_opt_merge_filter() for-each-ref: add '--points-at' option ref-filter: implement '--points-at' option