Como usuario de Git Me encuentro regular de la situación, que necesito para volver a trabajar uno o más confirmaciones de una manera que no encajan en --amend
o rebase -i
con commits corrección. Normalmente haría algo como
git reset HEAD~1
# hack, fix, hack
git commit -a
# argh .. do I need to retype my message?
Tomo los mensajes de compromiso sensatos y compuestos bastante en serio. Por lo general, contienen texto más grande con referencias y justificaciones para el cambio. Hasta ahora, estoy bastante molesto en el largo proceso para recuperar mi antiguo mensaje de registro a través de una desordenada git reflog
, git log
y copiar y pegar proceso.
¿Hay algo mejor para abordar esto? ¿Y cómo sería, si mi comprende más de un compromiso?
Editar: Después de pensar un poco en esto, creo que lo que estoy buscando es una funcionalidad similar a git stash para mensajes de confirmación en los que las confirmaciones de corrección / modificación no son apropiadas.
fuente
git reset head~1
, ¿no sería su antiguo mensaje de confirmación la segunda entrada en elreflog
?gitk
abierto. De esa manera, ni siquiera tendrá que usar el reflog. Alternativamente, userev-parse <branch>
para obtener su hash antes del reinicio y use la respuesta de ibizaman.Respuestas:
Después de un
git reset
, este one-liner puede hacerlo:o incluso más corto:
Puede usar las otras opciones proporcionadas por @ user2718704 .
fuente
git commit -C@@{1}
git commit --reuse-message=ORIG_HEAD
ser el más claro.Al ejecutar el comando "git commit", debe verificar las siguientes opciones,
Reutilizar,
Para editar sobre la reutilización,
Para cambiar el autor,
fuente
¿Por qué reiniciar si puedes piratear, arreglar, piratear y luego simplemente ejecutar
git commit --amend --no-edit
? así, conservando su mensaje de confirmación original.Para que funcione para múltiples confirmaciones, simplemente cree una confirmación temporal con sus cambios más recientes y luego use una rebase interactiva para aplastar la confirmación anterior (que contiene el mensaje de confirmación correcta) con la nueva temporal, manteniendo el mensaje de confirmación de la confirmación anterior.
fuente
fixup
instrucción para declarar que la confirmación posterior es para arreglar la confirmación anterior y automáticamente usará el mensaje de confirmación del original descartando el mensaje de la confirmación de reparación.rebase -i
. Nunca lo usé en ese contexto. Para los casos restantes, como volver a fusionar, la otra respuesta es más apropiada para mi pregunta, así que la marqué como respuesta.Podría considerar
git commit --reset-author -c <commit>
reutilizar el mensaje de confirmación con la edición y la hora actual.fuente