Git: cambia el post de HEAD commit sin tocar el índice

Sé que puedo usar git commit --amend --file=path-to-my-new-message pero esto también modificará los cambios en etapas. Por supuesto, podría esconder y luego aplicar y soltar el alijo, pero ¿hay una solución más rápida para cambiar el post de confirmación de HEAD sin comprometer los cambios por etapas (y la interacción del usuario)?

De acuerdo con la página man, git commit --amend --only sin ninguna git commit --amend --only especificada debe hacer el trabajo, sin embargo, esto no funciona para mí. Como solución alternativa, puede agregar temporalmente un file y eliminarlo nuevamente, modificando dos veces:

 touch tmp git add tmp git commit --amend -m "new message" tmp git rm tmp git commit --amend -m "new message" tmp 

Puede escribir un nuevo post de confirmación en un file (digamos msg.txt ) y usar git commit-tree , por ej.

 new_head=$(git commit-tree HEAD^{tree} -p HEAD^ <msg.txt) git reset --soft $new_head 

Esto supone que la confirmación que está modificando tiene un padre, si no es necesario que proporcione más -p HEAD^2 -p HEAD^3 ...

Es un poco feo y de bajo nivel. Puede que le resulte más fácil ocultar sus cambios y usar una "enmienda" directa.

 git stash git commit --amend git stash pop --index 

Como sugiere @Jefromi, también podría usar un file de índice temporal para la operación de modificación, por ejemplo

 GIT_INDEX_FILE=.git/tmpidx git reset GIT_INDEX_FILE=.git/tmpidx git commit --amend rm .git/tmpidx 

Puede git rebase -i HEAD^ y luego cambiar pick to reword en el editor abierto por git-rebase. Después de esto, se le pedirá un nuevo post de confirmación.