Un árbol es una colección jerárquica de archivos y directorios, no vinculada a ningún punto particular en la historia. Por ejemplo, si crea un archivo y luego lo elimina (sin otras confirmaciones intermedias), terminará con el mismo árbol con el que comenzó.
Un commit es un punto en la historia de su proyecto. Un commit especifica un árbol, pero también contiene otra información, como autor / committer y hora, un mensaje de compromiso (en el que el autor describe qué cambió) y, lo más importante, cero o más padres, que son el estado anterior del repositorio. (Su primer commit tiene cero padres. La mayoría de los commits tienen un padre durante el desarrollo lineal y más de uno si se fusiona).
Puede tener una idea de cómo funciona esto con el git cat-file -p
comando, que imprime el contenido de un hash en particular, independientemente del tipo. Por ejemplo, para ver la confirmación HEAD, puede ejecutar:
$ git cat-file -p HEAD
tree 81ca1cb660ea79131336944df28b13b711d93557
parent 92b6b8fe9956866ace5397e060e7cc8ee1c76233
parent 7ea2575ed96d150ee19f70edea4bd42c7c2f0b83
author Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
committer Mislav MarohniÄ <mislav.marohnic@gmail.com> 1436468108 -0700
Merge pull request #951 from github/global-args
Avoid depending on a hardcoded list of git global flags
Para ver el árbol dentro de ese commit, puedes cat-file -p
hacerlo:
$ git cat-file -p 81ca1cb660ea79131336944df28b13b711d93557
100644 blob 730f77a3be502cfe6769c1305c0b59c22274caf5 .gitignore
100644 blob bcbd000f6b9ad5b0510f804ac4a3b19306b39c03 .travis.yml
100644 blob da71aa1fa3c3ae47b2fe5e6245ce2eea1586e278 CONTRIBUTING.md
...
Del mismo modo, si miras a los padres, verás que esos son compromisos también. Una abreviatura para el árbol dentro de una confirmación como rev
es rev^{tree}
. Entonces el comando anterior podría haber sido escrito git cat-file -p HEAD^{tree}
. Tenga en cuenta que rev^
significa el padre de rev
. Cuando hay varios padres, rev^1
, rev^2
, etc. Más información está disponible en la página del manual de rev-parse git .
commit has
significa al comienzo de su tercer párrafo?