¿Por qué git commit -amend cambia el hash, incluso si no hago ningún cambio?

¿Por qué el hash SHA-1 de mi último cambio de confirmación, incluso si no hago ningún cambio en la confirmación (mensaje, archivos) después de ejecutar git commit --amend ?

Digamos que ejecuté lo siguiente en la línea de comandos.

 cd ~/Desktop mkdir test_amend cd test_amend git init echo 'foo' > test.txt git add test.txt git commit -m 'initial commit' 

Entonces llamando

 git log --pretty=oneline --abbrev-commit 

muestra el siguiente mensaje:

 b96a901 initial commit 

Entonces hago

 git commit --amend 

Pero cambié de opinión y decidí no cambiar nada en el último compromiso. En otras palabras, dejo intactos los archivos, los directorios y el último mensaje de confirmación (solo guardo el archivo del mensaje y cierro el editor).

Entonces yo hago

 git log --pretty=oneline --abbrev-commit 

Una vez más, veo que el hash de confirmación ha cambiado:

 3ce92dc initial commit 

¿Qué hace que un hash cambie? ¿Está relacionado con la marca de tiempo de fijación?

22
21 мая '14 в 22:20 2014-05-21 22:20 Jubobs está programado para el 21 de mayo de '14 a las 10:20 p.m. 2014-05-21 22:20
@ 3 respuestas

Sí, es una marca de fijación. Comprobando el contenido de dos shows de confirmaciones:

 $ git cat-file commit 82c7363bcfd727fe2d6b0a98412f71a10c8849c9 tree d87cbcba0e2ede0752bdafc5938da35546803ba5 author Thomas <xxx> 1400700200 +0200 committer Thomas <xxx> 1400700200 +0200 hello $ git cat-file commit 7432fcf82b65d9d757efd73ef7d6bff4707f99bd tree d87cbcba0e2ede0752bdafc5938da35546803ba5 author Thomas <xxx> 1400700200 +0200 committer Thomas <xxx> 1400700214 +0200 hello 

Si realiza cambios en el mismo segundo que el original, probablemente obtendrá el mismo hash.

20
21 мая '14 в 22:29 2014-05-21 22:29 Responder a Thomas el 21 de mayo de '14 a las 10:29 2014-05-05 22:29

Lo siguiente sucede en la creación del objeto commit sha.

  • referencia de objeto de árbol
  • enlace principal
  • nombre del autor
  • El autor corrige la marca de tiempo con el huso horario (por ejemplo, para mí es +530) [puede ser diferente del interlocutor , por ejemplo, en el caso de la recolección de cerezas]
  • nombre del remitente
  • corregir una marca de tiempo con una zona horaria (por ejemplo, es +530 para mí)
  • cometer mensaje
border=0

Intenté descubrir por qué los identificadores de SHA de confirmación difieren después de un restablecimiento y, nuevamente, agrego el mismo archivo con el mismo mensaje sobre el mismo usuario con la misma referencia al objeto principal y al árbol.

4
07 марта '15 в 20:20 2015-03-07 20:20 La respuesta es dada por Abhijit Mazumder el 7 de marzo de 2015 a las 20:20 2015-03-07 20:20

Realizar cambios en una confirmación Git cambia la fecha de confirmación (que es diferente de la fecha que ve inicialmente cuando ejecuta git log - ejecute git log --format=fuller para ver la fecha de confirmación). La fecha de confirmación se tiene en cuenta al crear una confirmación hash.

3
21 мая '14 в 22:24 2014-05-21 22:24 la respuesta se da mipadi el 21 de mayo de 2014 a las 10:24 p.m. 2014-05-21 22:24

Otras preguntas sobre etiquetas o Haz una pregunta