Como funciona o Git por dentro (e por que isso te salva de sustos)

Publicado em 2026-09-12 por frfrand

Git no guarda diferencias: guarda fotos completas. Entender eso explica por qué las ramas son baratas, por qué casi nada se pierde de verdad y qué hace realmente cada comando.

Como funciona o Git por dentro (e por que isso te salva de sustos)

Se pode usar Git durante anos com cinco comandos memorizados e sem entender o que faz. Funciona, até o dia em que algo dá errado e você não sabe por quê.

Entender o modelo leva dez minutos e muda a relação com a ferramenta.

Os três lugares

Todo comando do Git move algo entre três espaços:

O diretório de trabalho. Os arquivos como estão agora no seu disco.

A área de preparação (staging). Uma zona intermediária onde você monta o próximo commit. Quando faz git add, move mudanças para cá.

O repositório. O histórico confirmado. git commit pega o que está em staging e salva.

Essa zona intermediária confunde no início e é justamente o que torna o Git poderoso: permite escolher qual parte do seu trabalho entra em cada commit. Você pode ter cinco arquivos modificados e confirmar apenas dois, ou mesmo apenas algumas linhas de um com git add -p.

Um commit não é uma diferença

Aqui está o mal-entendido mais comum. A maioria acredita que um commit salva "o que mudou". Não é assim.

Um commit salva uma foto completa da árvore de arquivos naquele momento, mais um ponteiro para o commit anterior e alguns metadados.

As diferenças que você vê no git diff ou no GitHub são calculadas na hora, comparando duas fotos.

Não ocupa muito? Não, por duas razões: os arquivos que não mudaram são reutilizados (o Git guarda conteúdos pelo hash deles, então o mesmo conteúdo é armazenado apenas uma vez), e depois comprime tudo.

Desse design saem duas consequências importantes:

  • Os ramos são baratíssimos. Um ramo é um arquivo de 41 bytes que aponta para um commit. Criar um é instantâneo. Por isso o fluxo de trabalho do Git incentiva criar ramos para tudo, algo impensável em sistemas anteriores.
  • O histórico é verificável. O hash de um commit é calculado a partir do seu conteúdo, que inclui o hash do pai. Alterar algo antigo muda todos os hashes seguintes. Por isso reescrever o histórico compartilhado causa tantos problemas.

HEAD, ramos e o "detached HEAD"

HEAD é um ponteiro que diz onde você está parado.

Normalmente HEAD aponta para um ramo, e o ramo aponta para um commit. Quando você faz um novo commit, o ramo avança e HEAD vai com ele.

Se você fizer checkout de um commit diretamente, HEAD aponta para o commit sem passar por um ramo. Isso é o famoso "detached HEAD". Não está quebrado: simplesmente, se você fizer commits lá e sair, esses commits não terão nenhum ramo que os sustente. Por isso o aviso.

O comando que salva o dia

Este único dado justifica todo o artigo.

O Git mantém um registro de todas as posições pelas quais HEAD passou: o reflog.

git reflog

Se você fez um reset que não deveria, se excluiu um ramo por engano, se se perdeu no meio de um rebase, aí está a lista de onde você esteve, com o seu hash. Voltar é:

git reset --hard <hash>

Os commits órfãos permanecem no repositório durante semanas antes que o coletor de lixo os limpe. Quase nada se perde de verdade no Git. O que se perde são as alterações que nunca foram confirmadas, e para isso está o costume de fazer commits pequenos e frequentes.

O que convém ter em mente

  • Um commit é uma foto com um ponteiro para o pai.
  • Uma branch é um ponteiro para um commit, e é grátis.
  • HEAD diz onde você está.
  • O reflog lembra onde você esteve.

Com isso, os comandos deixam de ser fórmulas mágicas e passam a ser operações que você pode raciocinar.

Como funciona o Git por dentro (e por que isso te salva de sustos)
Como funciona o Git por dentro (e por que isso te salva de sustos)
  • Git
  • control de versiones
  • commits
  • fundamentos
  • programación

Continuar lendo

Todos os artigos · Planos VPS