O que é o HEAD in Git?

vês a documentação do Git a dizer coisas como

o ramo deve ser totalmente fundido na cabeça.

Mas o que é o Git?

 855
git
Author: nbro, 2010-02-21

16 answers

Podes pensar na cabeça como o "ramo actual". Quando você muda de branches com git checkout, a revisão da cabeça muda para apontar para a ponta do novo branch.

Você pode ver o que a cabeça aponta fazendo:

cat .git/HEAD

No meu caso, a saída é:

$ cat .git/HEAD
ref: refs/heads/master

É possível que o HEAD se refira a uma revisão específica que não está associada a um nome de ramo. Esta situação chama-se cabeça solta.

 634
Author: Greg Hewgill, 2010-02-20 23:00:49

Para citar outras pessoas:

Uma cabeça é simplesmente uma referência a uma commit object. Cada cabeça tem um nome (nome do ramo ou nome da marca, etc.). Por por omissão, há uma cabeça em cada repositório chamado Mestre. Repositorio pode conter qualquer número de cabeças. Em em qualquer momento, uma cabeça é selecionada como a " cabeça atual."Esta cabeça é aliased to HEAD, always in capitals".

Note esta diferença: uma "cabeça" (minúsculas) refere-se a qualquer um dos chamar cabeças no repositório;"cabeça" (maiúsculas) refere-se exclusivamente ao actualmente activo. Presente a distinção é usada frequentemente no Git documentacao.

Outra boa fonte que rapidamente cobre o funcionamento interno do git (e por isso uma melhor compreensão das cabeças/cabeças) pode ser encontrada {[[14]}aqui . Referências (ref:) ou cabeças ou ramos podem ser considerados como notas post-it presas em commits no histórico de commit. Normalmente apontam para a ponta da série de commits, mas eles podem ser movidos com git checkout ou git revert etc.

 150
Author: Silfheed, 2013-05-07 23:25:48
Recomendo esta definição do programador Scott Chacon.]:

A cabeça é o teu ramo actual. É uma referência simbólica. É uma referência a um ramo. Tens sempre cabeça, mas a cabeça vai apontar para um desses outros ponteiros, para um dos ramos em que estás. É o pai do teu próximo compromisso. É o que deve ser o que foi verificado pela última vez em seu diretório de trabalho... Este é o último estado conhecido do seu era o directório de trabalho.

Todo o vídeo dará uma introdução justa a todo o sistema git, então eu também recomendo que você assista tudo se tiver tempo para isso.

 45
Author: jasoares, 2018-04-18 16:21:23
A cabeça é apenas um ponteiro especial que aponta para o ramo local em que estás.

A partir do Livro Pro Git , Capítulo 3.1 Git ramifica-ramificações numa casca , na secção Criando um novo ramo:

O que acontece se criar um novo ramo? Bem, fazê-lo cria um novo apontador para te mexeres. Digamos que cria um novo ramo. chama-se Teste. Faça isto com o comando git branch:
$ git branch testing 

Isto cria um novo cursor no mesmo commit em que está actualmente

enter image description here

Como é que o Git sabe em que ramo estás? Mantém um ponteiro especial chamado cabeça. Note que isto é muito diferente do o conceito de cabeça em outros VCSs você pode ser usado para, tais como Subversion ou CVS. No Git, este é um ponteiro para o ramo local estás de momento. Neste caso, ainda estás no master. O git o comando branch só criou um novo branch - não mudou para que ramo.

enter image description here

 39
Author: Alexandr, 2018-07-18 20:24:54

Assumindo que não é um caso especial chamado "cabeça separada", então, como indicado no livro O'Reilly Git, 2ª edição, p. 69, HEAD significa:

HEAD refere-se sempre ao commit mais recente no actual ramo. Quando você muda de ramificações, HEAD é actualizado para se referir ao novo o último compromisso do branch.

Por isso

HEAD is the "tip" of the current branch .

Note que podemos usar HEAD para nos referirmos ao mais recente commit, e use HEAD~ como o commit antes da ponta, e HEAD~~ ou HEAD~2 como o commit ainda antes, e assim por diante.

 28
Author: 太極者無極而生, 2016-05-10 12:01:08

HEAD refere-se à persistência actual para a qual a sua cópia de trabalho aponta, ou seja, a persistência para a qual já saiu. Da documentação oficial do Linux sobre a especificação das revisões do Git:

HEAD nomeia o commit no qual você baseou as mudanças na árvore de trabalho.

Note, No entanto, que na próxima versão 1.8.4 do Git, @ também pode ser usado como uma abreviatura para {[[0]}, como observado pelo colaborador do Git Junio C Hamano no seu Git Culpar o blog:

Em vez de escrever "cabeça", pode dizer "@" em vez disso, por exemplo "git log @".

O Utilizador de Stack Overflow VonC também encontrou algumas informações interessantes sobre o porquê @ foi escolhido como uma abreviatura na sua resposta a outra pergunta .

Também de interesse, em alguns ambientes não é necessário capitalizar {[[0]}, especificamente em sistemas operativos que usam sistemas de ficheiros sem capitalização, especificamente Windows e OS X.

 19
Author: Community, 2017-05-23 12:10:48

Olha para criar e brincar com ramos

A cabeça é na verdade um ficheiro cujo conteúdo determina onde se refere a variável da cabeça:

$ cat .git/HEAD
ref: refs/heads/master
$ cat .git/refs/heads/master
35ede5c916f88d8ba5a9dd6afd69fcaf773f70ed

Neste repositório, o conteúdo do ficheiro HEAD refere-se a um segundo ficheiro denominado refs/heads/master. O ficheiro refs/heads / master contém a hash da persistência mais recente no ramo principal.

O resultado é pontos de cabeça para o commit ramo mestre a partir do .ficheiro git/refs/heads / master.

enter image description here

 14
Author: onmyway133, 2013-12-09 07:25:50
Só queria detalhar algumas coisas na resposta aceite do Greg Hewgil. De acordo com o guia de Bolso git

Ramo:

O ramo em si é definido como todos os pontos acessíveis no commit graph from the named commit (the "tip" of the branch).

Cabeça: {[7] } Um tipo especial de Ref

O árbitro especial determina em que ramo estás...

Ref

O Git define dois tipos de referências, ou apontadores nomeados, que ele chama "refs":

  • Um ref simples, que aponta directamente para um ID de objecto (normalmente um commit ou tag)
  • Um ref simbólico (ou symref), que aponta para outro ref (simples ou simbólico)
Como o Greg mencionou, a cabeça pode estar em "estado isolado". Então a cabeça pode ser um árbitro simples (para uma cabeça separada) ou um symref.

Se a cabeça é um ref simbólico para um ramo existente, então você são"on" aquele ramo. Se, por outro lado, a cabeça é uma simples ref directamente nomeando um commit pelo seu ID SHA - 1, então você não está" em " qualquer branch, mas em vez disso, no modo "cabeça separada", o que acontece quando você check-out alguns comprometo-me mais cedo a examinar.

 10
Author: mike, 2013-08-05 23:54:58
Acho que o' HEAD 'é o' check out ' actual. Em outras palavras, "HEAD" aponta para o commit que está atualmente verificado. Se acabou de clonar e não deu entrada, não sei o que indica, provavelmente uma localização inválida.
 5
Author: Nataraj, 2012-07-18 09:57:29
Uma ótima maneira de conduzir para casa o ponto indicado nas respostas corretas é correr Tens uma história de todos os sítios que o HEAD apontou.
 4
Author: tjb, 2012-05-12 19:27:21

A cabeça aponta para a ponta do ramo actualmente verificado.

enter image description here

No seu repositório, há um .pasta git. Abra o arquivo neste local:.git\refs\heads. O código (sha-1 hash) nesse arquivo (master na maioria dos casos) será o commit mais recente, ou seja, o visto no resultado do comando git log. Mais informações sobre o .pasta git: http://gitready.com/advanced/2009/03/23/whats-inside-your-git-directory.html

 4
Author: stack1, 2015-11-13 19:43:02

Parece que {[[0]} é apenas uma etiqueta para o último commit que você saiu.

Isto pode ser a ponta de um ramo específico (como" mestre") ou algum compromisso entre um ramo ("cabeça separada")

 1
Author: Vertexwahn, 2018-08-15 01:10:54

Estes dois podem confundir-te:

Cabeça

Apontando para referências com nomes de uma sucursal recentemente submetida. A menos que você use a referência do pacote , as cabeças normalmente armazenadas em $ GIT_DIR/refs/heads/.

Cabeça

Ramo actual, ou a sua árvore de trabalho é normalmente gerada a partir da cabeça da árvore está a apontar para. A cabeça deve apontar para uma cabeça, só que estás a usar uma cabeça separada.

 0
Author: Marcus Thornton, 2013-08-16 12:26:04

Olha para http://git-scm.com/book/en/Git-Branching-What-a-Branch-Is

Figura 3-5. Ficheiro principal a apontar para o ramo em que estás.

 -1
Author: Ting Wang, 2014-08-07 20:27:52

Como um conceito, o chefe é a última revisão de um ramo. Se tiver mais de uma cabeça por ramo nomeado, provavelmente criou-a ao fazer commits locais sem se fundir, criando efectivamente um ramo sem nome.

Para ter um repositório "limpo", deverá ter uma cabeça por ramo nomeado e juntar-se sempre a um ramo nomeado depois de ter trabalhado localmente.

Isto também é verdade para Mercurial.

 -4
Author: dukeofgaming, 2012-03-26 20:44:07