O que é Head in Git?
Às vezes, você vê a documentação do Git referente a algo chamado HEAD. Por exemplo, a ramificação deve ser completamente integrada no HEAD. Mas o que exatamente é Git HEAD?
Neste artigo, conheceremos mais sobre o Git HEAD, mas antes disso vamos resumir o que é o Git e para que é usado. O Git é uma ferramenta de controle distribuído usada não apenas por gerentes e desenvolvedores de produtos, mas também por cientistas de dados para gerenciar o desenvolvimento do código-fonte do programa e seu histórico.
Ponteiro HEAD no Git
O Git mantém uma variável para referência, chamada HEAD para a confirmação mais recente no ramo de checkout recente. Você pode imaginar HEAD como o "ramo comprometido atual". E podemos pensar como um ponteiro, como o objetivo dessa variável é apontar ou agir como uma referência a um commit específico no repositório. Digamos, nós fazemos um novo commit no repositório, então o ponteiro ou HEAD irá mover ou mudar sua posição para apontar para um novo commit.
HEAD aponta para o ponto inicial da ramificação atual no repositório o tempo todo. Pode ser considerado o último estado ou o último ponto de check-out em um repositório. Em outras palavras, o HEAD é um ponteiro para o pai dos próximos commits ou para onde o próximo commit acontecerá, pois é aí que o repo parou.
Uma boa analogia seria um toca-discos e as teclas de reprodução e gravação como HEAD. À medida que o áudio começa a gravar, a fita avança passando pela cabeça gravando nela. O botão Parar interrompe a gravação enquanto ainda aponta para o ponto que foi gravado pela última vez e o ponto em que a cabeça de gravação parou é onde continuará a gravar novamente quando a tecla Gravar for pressionada novamente. Se nos movimentarmos, o ponteiro da cabeça se moverá para lugares diferentes; no entanto, quando a tecla Record for pressionada novamente, a gravação começará a partir do ponto em que a cabeça estava apontando quando a tecla foi pressionada.
No Git, você pode usar o comando abaixo para ver o que o ponteiro HEAD aponta.
cat .git / HEAD:
- Ele mostra o conteúdo de .git / HEAD como mostrado abaixo
- ref: refs / chefes / mestre
- É basicamente uma referência simbólica à ramificação confirmada mais recente que você efetuou check-out e efetivamente aponta para a confirmação no início da ramificação atual.
Sempre que fazemos um novo commit, como mostrado abaixo, ele é adicionado antes do HEAD atual, que faz o Git apontar automaticamente o HEAD para o novo commit.
git diff HEAD..HEAD ~ 3: Mais precisamente, HEAD é um ponteiro em movimento que pode se referir à ramificação atual ou não, mas que sempre se refere ao "commit atual". (Commit atual) é o commit que o “git commit” é construído sobre, e geralmente é comparado com o “git diff –cached” e o “status git”.
git log @: Digitar 'HEAD' leva tempo, especialmente quando existe um atalho, '@'. O símbolo '@' é escolhido porque segue naturalmente a sintaxe (por exemplo, (u)), mas, além disso, não há referência ou operação e, quando não houver, 'HEAD 'pode ser assumido no lugar de @.
1. CABEÇA Isolada
É plausível para o HEAD apontar para uma alteração específica que ainda não foi vinculada a um nome de filial. Essa é a situação chamada HEAD desanexada e acontece quando alguém faz check-out de algo que não seja uma ramificação (local), digamos uma confirmação específica, uma ramificação remota ou uma tag. Portanto, o HEAD desanexado pode ser usado para fazer check-out de uma confirmação que não está apontando para o ponto inicial de qualquer filial existente ou para criar uma nova confirmação que não seja necessariamente referenciada por uma filial conhecida.
Vamos dar um exemplo em que fazemos checkout commit b de uma ou de outra maneira
- mestre de verificação geral do git ^#or
- git checkout v3.1
Observe que, independentemente do comando de checkout usado, o HEAD agora se refere à confirmação b. Esse status de b é chamado como estado HEAD desanexado.
Vejamos os exemplos abaixo para ver o que acontece quando um commit é criado:
git checkout -b foo: Primeiro é criada uma nova ramificação chamada foo, que é referida como commit f que, por sua vez, atualiza o HEAD para apontar para a ramificação foo. Isso significa que ele não estará mais no estado HEAD desanexado.
git branch foo: Isso cria um novo branch chamado foo, que é referido como commit f, mas o HEAD é deixado desanexado.
tag git foo: Isso também cria uma nova tag chamada foo, que é referida como commit f, mas o HEAD é deixado desanexado.
Suponha que você alterou para uma posição diferente de commit f, então o nome do objeto deve ser recuperado primeiro (normalmente feito usando o comando git reflog) e, depois disso, uma referência é criada para ele.
Para descobrir os dois últimos commits HEAD mencionados, use um dos comandos abaixo:
- git log -g -2 HEAD #ou
- git reflog -2 HEAD
2. ORIG_HEAD
Há mais um tipo de CABEÇA que você precisa conhecer. Os comandos “mesclar” ou “puxar” sempre deixaram a ponta original da ramificação atual em algo chamado ORIG_HEAD. Pode ser usado usando os seguintes comandos.
git reset –hard ORIG_HEAD: Usando isso, reset hard traz o arquivo de índice junto com a árvore de trabalho de volta ao seu estado original, enquanto redefine a ponta do ramo para esse commit, mas descarta as alterações locais.
git reset –merge ORIG_HEAD: Mas e se você quiser manter as alterações locais, no sentido de poder usar o comando acima para manter as alterações locais. Além disso, o merge sempre define '.git / ORIG_HEAD' para o estado original de HEAD, para uma mesclagem problemática pode ser removida usando 'git reset ORIG_HEAD'. Além disso, a mesclagem define '.git / ORIG_HEAD' para o estado original de HEAD o tempo todo, para remover uma mesclagem problemática usando 'git reset ORIG_HEAD'.
Se você enfrentar algum problema com várias confirmações, ORIG_HEAD é definido como o ponto inicial da ramificação atual antes de aplicar qualquer correção, pois um erro nas confirmações pode ser mais facilmente corrigido dessa maneira.
Vantagens do Git HEAD
- É usado para apontar para a ramificação confirmada recentemente.
- Pode ser usado para fazer alterações a partir do último ponto visitado.
- Também pode ser usado para ir para diferentes pontos da história e trabalhar a partir daí.
- Mantém o repositório e o processo limpos e legíveis.
Conclusão
O Git tem muitos usos e é amplamente utilizado por desenvolvedores, gerentes de produto e cientistas de dados. Seus comandos são muito eficazes e podem ser muito úteis. HEAD é uma referência ao último commit no ramo de check-out atualmente.
Artigos recomendados
Este é um guia para O que é o Head in Git ?. Aqui discutimos o ponteiro HEAD no Git, que inclui HEAD destacado e ORIG_HEAD junto com as vantagens do Git HEAD. Você também pode consultar os seguintes artigos para saber mais -
- O que é o Git Fetch?
- Git Fetch vs Git Fetch
- O que é o Git Branch?
- Terminologia Git
- Sistema de Controle de Versão GIT
- Git Push
- Três estágios do ciclo de vida do Git com o fluxo de trabalho
- Como usar o GIT Cherry-pick com o Exemplo?