Git alias para aplastar todas las confirmaciones con un post de confirmación particular

He estado usando este gitalias que obtuve de una pregunta aquí:

wip = !f() { git add -A; git ls-files --deleted -z | xargs -0 git rm; git commit -m "wip";}; f

Así que ahora tengo una serie de n commits, secuencialmente, que contienen 'wip' por sí solo como el post de confirmación.

¿Cómo hago un alias de git para encontrar el número correcto de confirmaciones de respaldo del tree que contienen "wip" y las aplasta? ¿Es realmente posible?

Probablemente necesites volver a rebase interactiva y aplastar las confirmaciones de rebase existentes. Dado que una rebase con calabazas cambiará la historia, dificulta (aunque no imposible) la automation; es mejor rebase a establecer la rebase caso por caso. Después de hacer esto, puede cambiar su alias de wip a lo siguiente:

 git config --global alias.wip '!f() { git add -A; git ls-files --deleted -z | xargs -0 -r git rm; s=`git show --format=%s HEAD | head -1`; if [ "wip" = "$s" ]; then git commit --amend -m "wip"; else git commit -m "wip"; fi;}; f' 

Esto evitaría commit contiguos de wip en tu historial. El alias se cambia de su alias original utilizando la opción xargs -r modo que If the standard input is completely empty, do not run the command. y si el tema de la --amend HEAD actual es wip , use commit --amend .