usar tag restaurar regresar recuperar hacer eliminar como cambios git git-log

tag - regresar cambios en git



¿Cómo cuenta `git log--since`? (1)

Tengo un repositorio de pruebas simple con solo varias confirmaciones y quiero ver el registro filtrado de fecha y hora:

$ git log --author="automatix" --since="2013-01-30" --pretty -- test commit ea0719bef142659fa561c9d040b2120012ed0184 Date: Thu Jan 31 02:03:12 2013 +0100 commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Date: Thu Jan 31 01:59:11 2013 +0100 commit a0b027beba2cd03571bb9475b9db9542f8efe990 Date: Thu Jan 31 01:50:38 2013 +0100 commit add77c8fe2ba9254c11b98e14facede3420dc51c Date: Thu Jan 31 01:48:34 2013 +0100 commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f Date: Thu Jan 31 01:46:27 2013 +0100 commit 8c286391e54d3fc1e210950b1320fd6f013a8f84 Date: Thu Jan 31 01:41:27 2013 +0100 commit 9c880595e57f717383796fa2940f41f0f42f7e2a Date: Thu Jan 31 01:38:17 2013 +0100 commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db Date: Thu Jan 31 01:30:00 2013 +0100

La primera confirmación seleccionada es a95527f36a533e1ecba1aadceea31a9dcbe1a8db de 2013-01-30 01:30:00 . Se seleccionan 8 commits:

$ git log --author="automatix" --since="2013-01-30" --format=oneline -- test | wc 8 34 498

DE ACUERDO. Ahora selecciono desde 2013-01-31 :

$ git log --author="automatix" --since="2013-01-31" --format=oneline -- test | wc 0 0 0

¿Qué? Ok, eso debería significar que la regla since excluye las confirmaciones de la fecha de inicio. ¿Derecha?

Pero sigamos:

$ git log --author="automatix" --since="2013-01-31 01:30:00" --pretty -- test commit ea0719bef142659fa561c9d040b2120012ed0184 Date: Thu Jan 31 02:03:12 2013 +0100 commit ab4a8387bc4d9bdb4f67212df77eb1fc3d8b6304 Date: Thu Jan 31 01:59:11 2013 +0100 commit a0b027beba2cd03571bb9475b9db9542f8efe990 Date: Thu Jan 31 01:50:38 2013 +0100 commit add77c8fe2ba9254c11b98e14facede3420dc51c Date: Thu Jan 31 01:48:34 2013 +0100 commit e6e323c05d37c74fcabeb9186b95c0d49b862e6f Date: Thu Jan 31 01:46:27 2013 +0100 commit 8c286391e54d3fc1e210950b1320fd6f013a8f84 Date: Thu Jan 31 01:41:27 2013 +0100 commit 9c880595e57f717383796fa2940f41f0f42f7e2a Date: Thu Jan 31 01:38:17 2013 +0100 commit a95527f36a533e1ecba1aadceea31a9dcbe1a8db Date: Thu Jan 31 01:30:00 2013 +0100

$ git log --author="automatix" --since="2013-01-31 01:30:00" --format=oneline -- test | wc 8 34 498

Ahora, cuando estoy escribiendo la hora de inicio también, los commits de la hora de inicio están incluidos .

No entiendo la lógica. ¿Alguien puede explicar por qué funciona tan extraño?

Gracias


En caso de que ayude a alguien más a aterrizar aquí como yo, después de un poco de investigación descubrí que usar el formato ISO8601 también funciona:

git log --since="2014-02-12T16:36:00-07:00"

Esto te dará precisión hasta el segundo. Nota: también puedes usar:

git log --after="2014-02-12T16:36:00-07:00" git log --before="2014-02-12T16:36:00-07:00" git log --since="1 month ago" git log --since="2 weeks 3 days 2 hours 30 minutes 59 seconds ago"

etc.

Por supuesto, esto no "explica por qué funciona tan extraño". Sin embargo, ciertamente resolvió el problema para mí.

EDITAR:

Después de investigar un poco más, descubrí "por qué funciona tan extrañamente":
Resulta que cuando no se especifica un formato de fecha, el registro de git se establece de forma predeterminada en la zona horaria del autor o en las fechas de confirmación , lo que significa un comportamiento consistente, es útil declarar explícitamente el formato de fecha con algo como:

git log --date=local

Por último, cuando no especifica una hora, la hora local es predeterminada cuando ejecuta el comando.

Para resumir, ser específico debería resolver el problema:

git log --date=local --after="2014-02-12T16:36:00-07:00"

Además, puede establecer el formato de fecha predeterminado permanentemente con el siguiente comando:

git config log.date local

puede usar cualquiera de estos valores: (relative|local|default|iso|rfc|short|raw)