Conceitos-chave

Staging area

  • Sinônimo: index (o nome mais técnico da estrutura de dados que, por baixo dos panos, implementa a staging area no Git)

Na staging area, você escolhe alterações específicas nos arquivos do projeto para incluir de forma permanente no próximo commit (pense em um snapshot/checkpoint) do seu repositório Git.

Pergunta: Por que escolher alterações específicas? Por que não simplesmente salvar tudo?

Resposta: Você também pode fazer isso, claro. Mas, no trabalho real, é comum acabar fazendo alterações sem relação entre si, mesmo quando o plano era outro.

Por exemplo, enquanto trabalha em uma nova funcionalidade, você pode topar por acaso com um erro de digitação no nome de uma variável do código existente ou atualizar uma documentação que estava incompleta. Essas alterações não têm relação com a funcionalidade, e muitas vezes é melhor commitá-las separadamente. Assim, se precisar reverter a funcionalidade mais tarde, você não vai reverter sem querer a correção do erro de digitação nem a atualização da documentação.

A staging area do Git permite:

  1. Selecionar alterações para incluir no próximo commit, adicionando à staging area apenas os arquivos ou trechos desejados. Assim, você cria commits focados e significativos, cada um dedicado a uma tarefa ou funcionalidade específica.

  2. Revisar as alterações na staging area antes de commitá-las em definitivo, para garantir que estejam corretas e completas. Assim, dá para flagrar modificações ou adições acidentais antes que elas entrem no histórico do repositório.

  3. Trabalhar aos poucos: termine uma parte, adicione as alterações à staging area; continue trabalhando nas outras e adicione mais alterações depois. Desse jeito, você monta aos poucos um conjunto de alterações estável e autocontido.

  4. Separar o trabalho em andamento do que já está pronto. Se você estragou algo, sempre pode descartar e desfazer as alterações fora do stage sem tocar nas que já estão no stage.

Exemplos

Veja o status da staging area e do seu espaço de trabalho:

git status

Adicione um único arquivo à staging area:

git add myfile.txt

Adicione todas as alterações de um diretório à staging area:

git add src/

O caractere . abaixo aponta para o diretório atual, ou seja, "todas as alterações no diretório atual". Quando executado a partir da raiz do repositório, esse comando adiciona ao stage todas as alterações do repositório inteiro:

git add .

Commite as alterações que estão no stage no histórico do seu repositório com uma mensagem:

git commit -m "Add feature XYZ or fix bug ABC"

Remova todas as alterações da staging area (sem desfazer as alterações em si):

git restore --staged .

O caractere . aparece de novo aqui; ele significa "remover da staging area todas as alterações do diretório atual".

Você também pode indicar um arquivo ou diretório específico:

git restore --staged path/to/file.txt