git rebase –committer-date-is-author-date –root no funciona

Intento establecer la date del committer del último commit a su date de autor. Usualmente esto funciona con git rebase --committer-date-is-author-date HEAD~1 . Lamentablemente, solo hay una confirmación, lo que significa que tengo que usar --root lugar de HEAD~1 pero git rebase --committer-date-is-author-date --root no establece la date del committer en la date del autor para algunos razón. ¿Que puedo hacer?

Las malas noticias

Desafortunadamente git rebase --root utiliza el código de rebase interactivo (porque el código no interactivo no puede "reproducir" el compromiso raíz), y --committer-date-is-author-date es en realidad una bandera pasada a git am , que implementa los casos simples no interactivos.

Las buenas noticias

Lo que hace git rebase , en un nivel fundamental, es copyr algunos commits (con, por lo general, algún tipo de cambio realizado durante el process de copydo), y luego señalar un nombre de twig en el último commit copydo. Si solo hay una confirmación que desea cambiar, mientras copy, puede usar git commit --amend lugar de git rebase . 1 Si solo hay una confirmación en todo el repository, solo puede haber una confirmación que debe cambiar, mientras se copy, por lo que se aplicará este caso.

En lugar de --committer-date-is-author-date , deberá usar la variable GIT_COMMITTER_DATE para establecer la timestamp de confirmación en algún valor arbitrario. También puede usar --author y / o --date para anular el nombre del autor y / o la timestamp. Por lo tanto:

 t='2017-09-01 12:34:56' GIT_COMMITTER_DATE="$t" git commit --amend --date="$t" 

establecería ambas marcas de time hasta el 1 de septiembre de 2017, a las 12:34:56. (Utilicé una variable de shell t aquí para evitar escribir la misma timestamp dos veces).

(Agregue --no-edit si no desea editar el post de confirmación. Recuerde que la nueva confirmación usará lo que está actualmente en el índice. Si ha cambiado el índice desde la extracción de la confirmación HEAD, puede querer copyr el HEAD compromete primero con un índice temporal y lo usa).


1 Esto supone que el cambio que desea realizar es, por ejemplo, el text del post de compromiso, la date o el autor o algo así, en lugar de la identificación principal del compromiso. La definición de una confirmación raíz es una sin identificación padre, y la git commit --amend continuará sin identificación padre, que es lo que quiere en este caso.