Las respuestas a ¿Cómo modificar las confirmaciones existentes y no eliminadas? describa una forma de enmendar los mensajes de confirmación anteriores que aún no se han enviado de manera ascendente. Los nuevos mensajes heredan las marcas de tiempo de las confirmaciones originales. Esto parece lógico, pero ¿hay alguna manera de restablecer también los tiempos?
git
timestamp
commit
git-rewrite-history
Dhskjlkakdh
fuente
fuente
git commit --amend --reset-author
Respuestas:
Úselo
git filter-branch
con un filtro env que se estableceGIT_AUTHOR_DATE
yGIT_COMMITTER_DATE
para el hash específico de la confirmación que desea solucionar.Esto invalidará eso y todos los hashes futuros.
Ejemplo:
Si desea cambiar las fechas de confirmación
119f9ecf58069b265ab22f1f97d2b648faf932e0
, puede hacerlo con algo como esto:fuente
Puede hacer una nueva versión interactiva y elegir editar para la confirmación cuya fecha desea modificar. Cuando el proceso de rebase se detiene para modificar la confirmación que escribe, por ejemplo:
Luego continúas tu rebase interactivo.
ACTUALIZACIÓN (en respuesta al comentario de studgeek): para cambiar la fecha de confirmación en lugar de la fecha del autor:
Las líneas anteriores establecen una variable de entorno GIT_COMMITTER_DATE que se utiliza en la confirmación de modificación.
Todo se prueba en Git Bash.
fuente
rebase
, solo puede hacer elgit commit --amend
+ var fixedDate = strftime(new Date(), "%c"); + var result = shelljs.exec("git commit --amend --date=\"" + fixedDate + "\" --no-edit");
Una mejor manera de manejar todas estas sugerencias en un comando es
Esto establecerá la última confirmación del commit y la fecha del autor en "ahora mismo".
fuente
LANG= GIT_COMMITTER_DATE="`date`" git commit --amend --date "`date`"
--date "now"
. Git> = 2 interpretará eso.Solo hazlo
git commit --amend --reset-author --no-edit
. Para las confirmaciones anteriores, puede hacer una modificación interactiva y elegiredit
la confirmación cuya fecha desea modificar.Luego, modifique la confirmación con
--reset-author
y--no-edit
para cambiar la fecha del autor a la fecha actual:Finalmente continúe con su rebase interactivo:
fuente
--reset-author
, es nuevo en git 1.6.6 (ref gitlog.wordpress.com/2010/01/13/git-1-6-6 )--reset-author
restablecerá tanto el Autor como la Fecha del autor hasta ahora.Escribí un script y un paquete Homebrew para esto. Súper fácil de instalar, puedes encontrarlo en la
PotatoLabs/git-redate
página de GitHub .Sintaxis:
Solo tiene que ejecutar
git redate
y podrá editar todas las fechas en vim de las 5 confirmaciones más recientes (también hay una-c
opción para la cantidad de confirmaciones que desea volver, solo se establece de manera predeterminada en 5). ¡Avíseme si tiene alguna pregunta, comentario o sugerencia!fuente
Cada confirmación está asociada con dos fechas, la fecha de confirmación y la fecha del autor. Puede ver estas fechas con:
Si desea cambiar la fecha del autor y la fecha del confirmador de las últimas 6 confirmaciones, simplemente puede usar una nueva versión interactiva:
.
Para todas las confirmaciones en las que desea cambiar la fecha, reemplácelas
pick
poredit
(o simplementee
), luego guarde y salga de su editor.Ahora puede modificar cada confirmación especificando la fecha de autor y la fecha de confirmación en formato ISO-8601:
La primera fecha es la fecha de confirmación, la segunda es la fecha del autor.
Luego vaya al siguiente compromiso con:
Repita el proceso hasta que modifique todas sus confirmaciones. Comprueba tu progresión con
git status
.fuente
git checkout name-of-current-branch
.--no-edit
degit commit --amend --no-edit --date=2017-10-08T09:51:07
mantener el viejo mensaje de registro.GIT_COMMITTER_DATE
como se describe aquí eddmann.com/posts/…fuente
Sobre la base de la respuesta de theosp , escribí un script llamado
git-cdc
(para confirmar la fecha de cambio) que puse en miPATH
.El nombre es importante:
git-xxx
en cualquier parte de su lePATH
permite escribir:Ese script está en bash, incluso en Windows (ya que Git lo llamará desde su entorno msys )
Con eso, puedes escribir:
Eso restablecería la fecha de autor / confirmación de la confirmación antes de HEAD (
@~
) a la fecha especificada.Eso restablecería la fecha de autor / confirmación de la confirmación antes de HEAD (
@~
) a la misma hora, pero hace 2 días.Ilya Semenov menciona en los comentarios :
fuente
git cdc @~ "2014-07-04 20:32:45
contrario, no reconocería la hora y, por lo tanto, obtendría la hora 00:00:00 (se convierte en el tercer argumento).brew install coreutils
), agregarlo a PATH (PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
) y luego usar la sintaxis "Hace 2 días".2 days ago
"?Cómo editar varias fechas de confirmación
Otras respuestas no son muy convenientes para editar varias fechas de confirmación. Volví a esta pregunta después de unos años para compartir una técnica.
Para cambiar las fechas de los últimos 4 commits:
Edite el rebase de la siguiente manera, insertando
exec
líneas para modificar las fechas según sea necesario:fuente
--amend
/--date
. Más simple que mi propia respuesta usando variables de entorno. VotadoGIT_AUTHOR_DATE
solo se actualiza .exec git commit --amend --no-edit --date "now"
si es anterior último commit.
si ya presionó para iniciar y puede forzar el uso:
si no puede forzar el empuje y si se empuja, ¡no puede cambiar el compromiso! .
fuente
Aquí hay un alias conveniente que cambia los tiempos de confirmación y autor del último compromiso a un tiempo aceptado por
date --date
:Uso:
git cd <date_arg>
Ejemplos:
Editar: Aquí hay una versión más automatizada que verifica que el índice esté limpio (sin cambios no confirmados) y reutiliza el último mensaje de confirmación, o falla de otra manera (a prueba de tontos):
fuente
Creé este paquete npm para cambiar la fecha de las confirmaciones anteriores.
https://github.com/bitriddler/git-change-date
Uso de muestra:
Se le pedirá que elija la confirmación que desea modificar y luego ingrese la nueva fecha.
Si desea cambiar una confirmación por hash específico, ejecute esto
git-change-date --hash=[hash]
fuente
La siguiente función bash cambiará la hora de cualquier confirmación en la rama actual.
Tenga cuidado de no usarlo si ya presionó el commit o si lo usa en otra rama.
fuente
if [[ -z "$commit" ]]
->if [[ -z "$date_timestamp" ]]
GIT_COMMITTER_DATE=
al final del método para evitar más confirmaciones manuales para mantener la fecha especificada.Para cambiar tanto la fecha del autor como la fecha de confirmación:
fuente
Si desea obtener la fecha exacta de otra confirmación (supongamos que modificó la edición de una confirmación y desea que tenga la fecha de la versión original anterior):
Esto corrige la fecha de confirmación HEAD para que sea exactamente la fecha de confirmación a383243 (incluya más dígitos si hay ambigüedades). También abrirá una ventana de editor para que pueda editar el mensaje de confirmación.
Eso es para la fecha del autor, que es lo que generalmente le interesa: vea otras respuestas para la fecha de confirmación.
fuente
Si desea realizar la respuesta aceptada ( https://stackoverflow.com/a/454750/72809 ) en la línea de comandos estándar de Windows, necesita el siguiente comando:
Notas:
^
), pero no tuve éxito.Muchas gracias a una publicación de blog de Colin Svingen . Aunque su código no funcionó para mí, me ayudó a encontrar la solución correcta.
fuente
Si commit aún no se ha presionado, entonces puedo usar algo así:
después de eso, git bash abre el editor con la fecha ya aplicada, por lo que solo necesita guardarlo escribiendo en el modo de comando del editor VI ": wq" y puede presionarlo
fuente
--no-edit
opción.git push -f
(actualización forzada). Sin embargo, eso puede tener efectos secundarios. (especialmente si muchas personas tienen clones locales del repositorio)Para aquellos que usan Powershell
Crédito a https://mnaoumov.wordpress.com/2012/09/23/git-change-date-of-commit/
fuente
Ya hay muchas respuestas excelentes, pero cuando quiero cambiar la fecha de varias confirmaciones en un día o en un mes, no encuentro una respuesta adecuada. Así que creo un nuevo script para esto con una explicación, espero que ayude a alguien:
La fecha será cambiada:
fuente