Actualizar la fecha del autor de confirmación de git al modificar

305

Me encontré modificando mis compromisos con bastante frecuencia. No lo hago stashmucho porque tiendo a olvidar que lo hice, especialmente cuando quiero guardar lo que hice antes de irme o antes de un fin de semana, así que hago un compromiso de "borrador". Lo único es que, cuando modifico el commit, todavía está configurado en la fecha original del autor. ¿Hay alguna forma (simple) de actualizarlo al modificar?

ksol
fuente
55
Esto es especialmente útil cuando realiza un rebase interactivo y espera que GitHub muestre los commits en la Solicitud de extracción en orden de árbol en lugar de orden de fecha.
Sukima

Respuestas:

368

Puede cambiar la fecha del autor con el --dateparámetro a git commit. Por lo tanto, si desea modificar la última confirmación y actualizar su fecha de autor a la fecha y hora actuales, puede hacer lo siguiente:

git commit --amend --date="$(date -R)"

(El -Rparámetro to datele dice que envíe la fecha en formato RFC 2822. Este es uno de los formatos de fecha entendidos porgit commit ).

Mark Longair
fuente
27
FTR, parece en OS X, dateno lo sabe -R. Usar datesin opciones hizo el trabajo de todos modos
ksol
77
Tenga en cuenta que si desea esto como un alias, debe agregar !ay escapar de las comillas, por ejemplocan = !git commit --amend --date=\"$(date -R)\"
Fabian Steeg
99
date -Rno funciona en OSX, use date +%sen su lugar
guarde
44
Idem para FreeBSD:git commit --amend --date="$(date +%s)"
Dereckson
120
git commit --amend --date=nowFunciona también. No es necesario invocar una subshell con el comando date (1) . Puede verlo en el código fuente de git (1) en date.c 'now' es un valor especial que se convierte utilizando la función date_now (). Lo mismo para 'mediodía', 'ayer', 'medianoche', 'té' y otros que figuran en la matriz de estructura especial [].
sbz
267

Otra forma de hacer esto es

git commit --amend --reset-author

Esto cambia el autor de la confirmación, así como la fecha, pero si originalmente fue su confirmación no apresurada, entonces eso es un no-op.

También puede agregar --no-editsi desea actualizar la fecha en varias confirmaciones pero desea que los mensajes de confirmación permanezcan intactos. De esta manera, no se le pedirá que edite el mensaje para cada confirmación.

Rup
fuente
44
Me pregunto por qué este comportamiento no es predeterminado y debería especificarse explícitamente. Es muy sorprendente y conduce a consecuencias potencialmente malas. En mi opinión, los git commit --amend cambios se comprometen en lugar de solo ajustes o algo así, es decir, da como resultado un historial diferente de cambios en el contenido del repositorio donde cualquier sistema de control de versiones es muy estricto. Y como tal, intuitivamente espero que tanto el autor como la fecha coincidan con los datos de confirmación reales. Especialmente la autoría es importante, ni siquiera la fecha. Vota este comentario si quieres vencer a los desarrolladores de git responsables de dicho incumplimiento. :)
Artem Pisarenko
258

A partir de Git v2.1.4 (probado en Debian 8 (Jessie))

git commit --amend --date=now
Kamal
fuente
8
Y si no desea volver a ver el mensaje de confirmación, agregue --no-edit.
Henrik N
12

Me gusta la respuesta de Mark y la usé varias veces, pero ahora estoy en OS X y date -Rno es compatible. Pero todo es mucho más fácil de lo que la respuesta original nos hizo pensar, ¡solo use una cadena vacía !

git commit --date= --amend
JLarky
fuente
66
Eso no funciona Git aborta con el errorfatal: invalid date format:
Nikos C.
Me funcionó (en Windows, Git 1.9.4)
Csq
1
Mejor usar --date="$(date)"en OS X. La opción -Res GNUism.
Rudá Moura
0

Creé este paquete npm si alguien todavía está buscando una manera simple de cambiar las fechas de múltiples confirmaciones.

https://github.com/bitriddler/git-change-date

Uso:

npm install -g git-change-date
cd [your-directory]
git-change-date
Kareem Elbahrawy
fuente
17
¿Uno realmente necesita otro npmpaquete? No, aprenda a usar el gitcomando tal cual.
Urda