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.
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
Revê o snapshot preparado, não apenas o estado do editor.
Referência: Git: comparing changes · Git 2.56; workflow concepts compatible with modern Git 2.x