ver pendientes modificados example commits archivos git sha amend

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



git ver archivos modificados (3)

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

Digamos que ejecuto 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''

Luego, invocando

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

imprime el siguiente mensaje:

b96a901 initial commit

Entonces hago

git commit --amend

pero cambio de opinión y decido no cambiar nada en el último compromiso. En otras palabras, dejo los archivos, los directorios y el mensaje de la última confirmación intactos (solo guardo el archivo de mensaje y cierro mi editor).

Entonces lo hago

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

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

3ce92dc initial commit

¿Qué causa el hash para cambiar? ¿Tiene que ver con la marca de tiempo del commit?


Al enmendar una confirmación de Git se modifica 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 el hash de confirmación.


Las siguientes cosas van en la creación de cometer sha objeto

  1. referencia de objeto de árbol
  2. referencia de objeto principal
  3. nombre del autor
  4. el autor comenta la marca de tiempo con la zona horaria (p. ej., para mí su +530) [podría ser diferente del comit, por ejemplo, en el caso de la recolección de cerezas]
  5. nombre del remitente
  6. cometer marca de tiempo con zona horaria (por ejemplo, para mí es +530)
  7. cometer mensaje

Estaba tratando de averiguar por qué los ID de SHA de confirmación son diferentes después de restablecer y agregar nuevamente el mismo archivo con exactamente el mismo mensaje de confirmación por el mismo usuario con la misma referencia de objeto principal y de árbol.


Sí, es la marca de tiempo de compromiso. La inspección de los contenidos de los dos compromisos revela:

$ 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 modificas en el mismo segundo que la confirmación original, probablemente obtendrás el mismo hash.