Da working tree ao histórico: o ciclo de vida do commit

Prévia grátis 3 min de leitura

Uma fotografia de uma fotografia

O curso anterior apresentou os três estados que um arquivo atravessa. Você usou git add e git commit só o suficiente para provar que um repositório funcionava. Este curso é o mergulho de verdade. Ele cobre cada opção, cada rede de segurança e os hábitos que deixam um histórico de commits legível para um colega.

Comece pelo exato modelo que você já conhece:

Working Tree            Staging Area                Repositório (histórico)
(arquivos no disco) ──▶ (prestes a ser commitado) ──▶ (fotografias permanentes)
     git add                  git commit

O detalhe que vale internalizar hoje: um commit é uma fotografia da staging area, não da sua working tree. Se você editar um arquivo depois de colocá-lo no stage, essa edição não entra automaticamente. Esse fato explica quase toda surpresa do tipo "mas eu tinha salvado essa mudança!".

Prove isso

cd ~/code/git-playground
echo "linha um" > notes.txt
git add notes.txt
echo "linha dois" >> notes.txt
git commit -m "Add notes"
git show --stat HEAD
 notes.txt | 1 +
 1 file changed, 1 insertion(+)

Só "linha um" entrou no commit. "linha dois" foi escrita na working tree depois do git add, então a staging area nunca a viu. Ela continua ali, fora do stage, esperando o próximo git add. Confirme:

git status
Changes not staged for commit:
  modified:   notes.txt

Por que existe uma etapa de stage separada

Seria mais simples se o git commit pegasse tudo que está no disco. O trabalho de verdade raramente é uma única mudança limpa. Você corrige um bug, percebe um erro de digitação sem relação e adiciona um puts de debug que devia ter apagado. O stage deixa você montar um commit que é uma mudança lógica, mesmo quando sua working tree está mais bagunçada do que isso.

Este curso segue essa ideia. A Aula 2 cobre o git add em detalhe, incluindo colocar no stage só parte de um arquivo. A Aula 3 cobre a mensagem que explica a mudança. As Aulas 4–6 cobrem como corrigir erros em cada etapa, e a Aula 7 junta tudo numa feature real.

Três comandos, relembrados

Uma lembrança rápida dos três que você já tem, já que toda aula daqui para frente usa eles o tempo todo:

Comando O que ele responde
git status O que está staged, fora do stage, ou não rastreado agora mesmo
git diff O que mudou na working tree, fora do stage
git diff --staged O que mudou na staging area: o que o próximo commit vai conter

Esse último é o comando para rodar antes de todo commit único, sem exceção, pelo resto da sua carreira.

Pontos-chave

  • Um commit captura a staging area, não a working tree: edições feitas depois do git add precisam ser colocadas no stage de novo.
  • A staging area existe para deixar você montar um commit único e lógico a partir de uma working tree que tem várias mudanças sem relação misturadas.
  • git diff --staged mostra o que o próximo commit vai conter: rode isso antes de todo commit.
  • Este curso cobre o add, como escrever mensagens, e todo jeito seguro de desfazer um erro em cada etapa do fluxo.
Aula 1 de 7 · grátis

Continue com a aula 2

git add: colocando no stage exatamente o que você quer

Compara git add ., -A e -u e usa git add -p para separar trechos de um arquivo.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...