2012-04-04 9 views
19

Considere tengo comprometecalabaza git y preservar de la última confirmación de marca de tiempo

... -- A -- B -- C 

Si uso git rebase -i para aplastar las tres confirmaciones en uno, podríamos

pick A 
squash B 
squash C 

que ver el resultado cometer A tiene su fecha y hora original ¿Cómo podría heredar la marca de tiempo de commit C (la última)?

Lo que puedo pensar es git commit --amend --date=<new_time>, pero esta manera necesita recordar la marca de tiempo de commit C antes de squash o de reflog.

Encuentro que la marca de tiempo de la última confirmación es más razonable, porque muestra cuando realmente terminé el trabajo que está en las confirmaciones.

Gracias.

Respuesta

11

No hay una manera trivial de hacerlo, pero hay algunas opciones. Aquí hay uno:

git commit --amend --date="$(git show -s --pretty=tformat:%ai <sha1-of-C>)" 

Y otro:

git commit --amend -c <sha1-of-C> 

Este último clobber su actual mensaje de confirmación, por lo que tendrá que volver a escribir.

+0

¿Por qué usas 'tformat'? –

+0

@CrendKing: en este caso, no importa si se trata de 'format' o' tformat' porque la nueva línea 'tformat' está desglosada por las reglas de sustitución de comandos del shell. Sin embargo, el 99% del tiempo quiero la nueva línea final (o lo que sea el terminador) porque generalmente estoy analizando el resultado del registro personalizado con un script. Para asegurarme de que habitualmente tecleo 'tformat' cuando es importante, uso' tformat' incluso cuando no importa. –

3

git commit --amend --reset-author

+0

Esto no usa la marca de tiempo de C, usa la hora actual como la marca de tiempo. – Doug

Cuestiones relacionadas