Da working tree ao histórico: o ciclo de vida do commit
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 addprecisam 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 --stagedmostra 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.
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.