Pergunta

Parece haver uma diferença entre a última confirmação, a cabeça e o estado do arquivo que posso ver no meu diretório.

O que é a cabeça, o que posso fazer com isso e que erro devo evitar?

Foi útil?

Solução

Head é uma referência à última confirmação na filial de check-out atualmente.


Há uma pequena exceção a isso, que é a cabeça isolada. UMA cabeça destacada é a situação em que você acaba sempre que verifica um comprometer-se (ou tag) em vez de uma ramificação. Nesse caso, você deve imaginar isso como um ramo temporário sem nome; Então, em vez de ter uma referência de filial nomeada, nós tem cabeça. Ele ainda permitirá que você faça compromissos (que atualizarão a cabeça), para que a definição curta acima ainda seja verdadeira se você pensar em uma cabeça isolada como uma ramificação temporária sem nome.

Outras dicas

HEAD é uma referência para o comprometimento atualmente verificado.

Nos estados normais, na verdade é um referência simbólica para o ramo que você fez o check -out - se você olhar para o conteúdo do .git/cabeça, verá algo como "Ref: Refs/Heads/Master". A ramificação em si é uma referência à confirmação na ponta do ramo. Portanto, no estado normal, HEAD refere -se efetivamente à confirmação na ponta do ramo atual.

Também é possível ter uma "cabeça isolada". Isso acontece quando você verifica algo além de uma ramificação (local), como uma ramificação remota, uma confirmação específica ou uma tag. O lugar mais comum para ver isso é durante uma rebase interativa, quando você escolhe editar um compromisso. No estado de cabeça isolada, sua cabeça é uma referência direta a uma confirmação - o conteúdo do .git/cabeça será um hash sha1.

De um modo geral, Head é apenas um nome conveniente para significar "o que você checou" e você realmente não precisa se preocupar muito com isso. Esteja ciente do que você fez o check -out e lembre -se de que provavelmente não quer se comprometer se não estiver em um ramo (estado de cabeça destacado), a menos que saiba o que está fazendo (por exemplo, está em uma rebase interativa) .

Ponteiro da cabeça no git

O Git mantém uma variável de referência chamada Head. E chamamos essa variável de ponteiro, porque seu objetivo é referência ou apontar uma confirmação específica no repositório. À medida que fazemos novas confirmações, o ponteiro vai mudar ou passar para apontar para uma nova confirmação. A cabeça sempre aponta para a ponta da filial atual em nosso repositório. Agora, isso tem a ver com nosso repositório, não com o nosso índice de estadiamento ou nosso diretório de trabalho.

Outra maneira de pensar nisso é o último estado de nosso repositório ou o que foi o check -out pela última vez, e porque é onde o repositório parou ou o último estado, você também pode dizer que a cabeça aponta para o pai da próxima confirmação ou é onde a escrita commit vai acontecer.

Eu acho que uma boa metáfora para pensar sobre isso é a reprodução e a cabeça de gravação em um gravador de fitas cassete. Quando começamos a gravar áudio, a fita passa pela cabeça e registra nela. Quando pressionamos, pare o local onde a cabeça do registro é interrompida é o lugar em que começará a gravar novamente quando pressionarmos o registro pela segunda vez. Agora podemos nos mover, podemos mover a cabeça para lugares diferentes, mas onde quer que a cabeça esteja posicionada Quando atingimos o registro novamente, é onde ele começará a gravar.

O ponteiro da cabeça no Git é muito semelhante, aponta para o local onde começaremos a gravar a seguir. É o lugar onde paramos em nosso repositório para as coisas que cometemos.

Isso deveria ter sido um comentário, mas é muito longo para um compromisso

Eu sempre pensei HEAD~5 significa ir para 5 compromissos antes. Mas não leva a parte do comando. Ele só carrega a referência/'onde' papel do comando.

Em termos leigos, é usado para responder à pergunta de: ONDE devo ir? Para qual comprometimento?

Se você diz

HEAD significa (a referência ao) commit atual

HEAD~1 significa (a referência a) 1 comprometimento antes

HEAD~87 significa (a referência a) 87 compromissos antes

git checkout HEAD~1 irá realmente ir para essa referência/compromisso

Em termos simples, Head é uma referência à última confirmação na filial de check-out atualmente.

Pense na cabeça como o "ramo atual". Quando você troca de ramificações com o checkout do Git, a revisão da cabeça muda para apontar para a ponta da nova ramificação.

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

cat .git/HEAD

É possível que a cabeça consulte uma revisão específica que não está associada a um nome de ramificação. Esta situação é chamada de cabeça isolada.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top