Uma árvore é uma coleção hierárquica de arquivos e diretórios, não vinculada a nenhum ponto específico da história. Por exemplo, se você criar um arquivo e depois excluir o arquivo (sem nenhuma outra confirmação intermediária), você terminará na mesma árvore em que iniciou.
Uma confirmação é um ponto na história do seu projeto. Uma confirmação especifica uma árvore, mas também contém outras informações como autor / confirmador e hora, uma mensagem de confirmação (na qual o autor descreve o que mudou) e, mais importante, zero ou mais pais, que são o estado anterior do repositório. (Seu primeiro commit possui zero pais. A maioria dos commit depois disso tem um pai durante o desenvolvimento linear e mais de um se você mesclar.)
Você pode ter uma idéia de como isso funciona com o git cat-file -p
comando, que imprime o conteúdo de um hash específico, independentemente do tipo. Por exemplo, para examinar o commit HEAD, você pode executar:
$ git cat-file -p HEAD
tree 81ca1cb660ea79131336944df28b13b711d93557
parent 92b6b8fe9956866ace5397e060e7cc8ee1c76233
parent 7ea2575ed96d150ee19f70edea4bd42c7c2f0b83
author Mislav MarohniÄ <[email protected]> 1436468108 -0700
committer Mislav MarohniÄ <[email protected]> 1436468108 -0700
Merge pull request #951 from github/global-args
Avoid depending on a hardcoded list of git global flags
Para ver a árvore dentro desse commit, você pode cat-file -p
:
$ git cat-file -p 81ca1cb660ea79131336944df28b13b711d93557
100644 blob 730f77a3be502cfe6769c1305c0b59c22274caf5 .gitignore
100644 blob bcbd000f6b9ad5b0510f804ac4a3b19306b39c03 .travis.yml
100644 blob da71aa1fa3c3ae47b2fe5e6245ce2eea1586e278 CONTRIBUTING.md
...
Da mesma forma, se você olhar para os pais, também verá que esses são commits. Uma abreviação para a árvore dentro de um commit como rev
é rev^{tree}
. Portanto, o comando anterior poderia ter sido escrito git cat-file -p HEAD^{tree}
. Observe que rev^
significa o pai de rev
. Quando existem vários pais, rev^1
, rev^2
, etc. Mais informações estão disponíveis na página do homem rev-parse git .
commit has
significa no início do seu terceiro parágrafo?