← Git: decisões e recuperação em equipa
01 / 12 · 18 MIN

Working tree, index e commit

Distingue alterações locais daquilo que o próximo commit irá guardar.

Conceito e mecanismo

O working tree contém os ficheiros em edição. O index, também chamado staging area, contém a versão preparada para o próximo commit. Um commit regista um snapshot do index e referências aos seus antecessores. Depois de executar git add num ficheiro, uma nova edição não altera automaticamente a versão preparada. Podes, por isso, ter alterações preparadas e não preparadas no mesmo ficheiro. Essa separação permite criar commits pequenos e coerentes, mas exige rever o conteúdo real antes de guardar.

Aplicação guiada

Num exercício local, altera duas funções e prepara apenas a correção pretendida. Usa git diff para comparar working tree com index e git diff --cached para comparar index com HEAD. Revê também ficheiros não acompanhados, que não aparecem como diferenças de conteúdo nos ficheiros já acompanhados. Para retirar um ficheiro do próximo commit mantendo a edição, usa git restore --staged -- caminho. Confirma novamente o estado e a diferença preparada. Não uses um comando que repõe o working tree quando só pretendes mudar a seleção do commit.

NA PRÁTICA

Preparaste config.yml e depois removeste uma password do ficheiro local. O index pode ainda conter a password. Revê e atualiza o conteúdo preparado antes de fazer commit.

Armadilhas comuns

Confundir a versão visível no editor com a versão preparada; pensar que .gitignore deixa de acompanhar ficheiros já versionados.

Tópicos relacionados: Branches, merge e rebase · Remotos e publicação coordenada

Leva esta ideia contigo

Revê o snapshot preparado, não apenas o estado do editor.

Criar conta

Referência: Git: comparing changes · Git 2.56; workflow concepts compatible with modern Git 2.x