¿Cómo puedo eliminar todas las twigs de git que han sido "Squash and Merge" a través de GitHub?

Desde que GitHub introdujo Squash and Merge , todos los chicos geniales de mi lugar de trabajo lo están usando al fusionar requestes de extracción. ¿Hay alguna forma de limpiar las sucursales de "Squash and Merge"?

El siguiente command de ¿Cómo puedo eliminar todas las twigs de git que se han fusionado? no funciona para "Squash and Merge":

git branch --merged | egrep -v "(^\*|master|dev)" | xargs git branch -d 

No hay una manera fácil de automatizar esto, al less no del todo. (Se pueden manejar algunos casos especiales). En cambio, lo mejor que se puede hacer es delegar esta eliminación de twig a la persona cuya request de extracción se ha fusionado. Hay varias buenas razones para eso:

  1. Son los únicos que pueden estar seguros de que la fusión se realizó correctamente.

    Supongamos, por ejemplo, que para aplastar-fusionar una serie de seis commits, la persona que hizo la squash-merge tuvo que, o eligió cambiar, algunos caracteres en alguna línea o dos, por alguna razón buena o mala . Esa línea o dos significa que el cambio general en la confirmación final es diferente de la sum de los seis cambios en las seis confirmaciones.

    ¿Pero es el resultado general correcto? Si usted no hizo ninguno de los cambios usted mismo, ¿cómo lo sabrá?

  2. Ellos son los únicos que saben si pretenden seguir desarrollándose en esa twig.

    El hecho de que los seis commits en feature/tall fueran aplastados en un commit agregado a devel no significa que feature/tall haya terminado . Pueden tener varios compromisos más para agregar; es posible que deseen volver a establecer la feature/tall en el devel nuevamente, dejando caer los seis compromisos aplastados a favor de un compromiso de seis, pero manteniendo otros tres compromisos que están por agregar.

Probablemente hay algunos casos más. Todos estos pueden ser raros; es posible que nunca ocurran en su proyecto; pero el punto aquí es que la feature/tall la sucursal es su sucursal, no su sucursal, por lo que ellos, sean quienes sean, deberían ser los que lo eliminen cuando esté terminado.

Tenga en count que cuando selecciona feature/tall tiene su propio Git, renómbrelo a origin/feature/tall (suponiendo que su control remoto se llame origin ). Si está experimentando con él, y la git checkout feature/tall , su Git hace una copy para usted. Una vez que eliminan feature/tall y ejecutas git fetch origin --prune , tu Git borra tu origin/feature/tall . Así que ahora el problema es más simple y se puede automatizar: encuentre las twigs cuyo "upstream" haya desaparecido y elimínelas . (El guión de una línea en esta respuesta tiene algunos defectos menores, vea los comentarios, uno más elegante usaría git for-each-ref y searchía la configuration ascendente de cada twig con git rev-parse , pero eso probablemente sea excesivo).