git add
Adicionar o conteúdo dos arquivos ao índice (área de preparação)
O comando 'git add' atualiza o índice com o conteúdo atual da árvore de trabalho, para preparar o conteúdo do próximo commit. O índice, também chamado de área de preparação, é o que você usa para preparar o conteúdo do próximo commit. Quando você roda 'git commit' sem outros argumentos, só as mudanças preparadas vão para o commit. Este comando pode ser rodado várias vezes antes de um commit para adicionar mudanças aos poucos.
Sinopse
git add [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--all | -A] [--update | -u] [--] [<pathspec>...]Opções
Escolhendo a opção certa
Comandos de preparação
Quais arquivos são preparados por cada comando
| Comando | Arquivos novos | Arquivos modificados | Arquivos excluídos | Alcance |
|---|---|---|---|---|
git add <file> | ✓ | ✓ | ✓ | Só o arquivo indicado |
git add . | ✓ | ✓ | ✓ | Diretório atual e abaixo |
git add -A | ✓ | ✓ | ✓ | Repositório inteiro |
git add -u | ✗ | ✓ | ✓ | Só arquivos rastreados |
git add --no-all | ✓ | ✓ | ✗ | Ignora exclusões |
Opções interativas
Opções para controlar em detalhe o que é preparado
| Comando | Modo | Granularidade | Caso de uso |
|---|---|---|---|
git add -p | Patch | Trecho a trecho | Preparar mudanças específicas de um arquivo |
git add -e | Editor | Linha a linha | Editar o diff à mão antes de preparar |
git add -i | Menu | Arquivo a arquivo | Menu de preparação interativo completo |
Opções de pré-visualização e saída
Opções que mostram informações sem modificar a área de preparação
| Comando | Ação | Modifica o índice | Propósito |
|---|---|---|---|
git add -n | Dry-run | ✗ | Pré-visualizar o que seria preparado |
git add -v | Detalhado | ✓ | Mostrar os arquivos à medida que são preparados |
git add --refresh | Atualizar | ✗ | Atualizar só as informações de stat |
Arquivos especiais
Opções para arquivos que precisam de tratamento especial
| Comando | Lida com | Comportamento | Uso típico |
|---|---|---|---|
git add -f | Arquivos ignorados | Passar por cima do .gitignore | Adicionar um arquivo normalmente ignorado |
git add -N | Arquivos novos | Intenção de adicionar (vazio) | Rastrear um arquivo para o git diff sem prepará-lo |
git add --chmod=+x | Executáveis | Definir o modo do arquivo | Tornar scripts executáveis |
git add --sparse | Arquivos sparse | Fora do cone | Preparar arquivos fora do sparse checkout |
Opções avançadas
Opções de nível avançado para cenários específicos
| Comando | Propósito | Quando usar |
|---|---|---|
git add --renormalize | Reaplicar os filtros clean | Depois de mudar os finais de linha no .gitattributes |
git add --pathspec-from-file | Ler caminhos de um arquivo | Preparar muitos arquivos a partir de uma lista |
git add --ignore-errors | Continuar apesar de erros | Prepare o que der e pule as falhas |
git add --no-warn-embedded-repo | Silenciar o aviso de submódulo | Adicionar repositórios aninhados de propósito |
Exemplos de fluxos de trabalho
git statusRevisar primeiro todas as mudanças
git add -APreparar todos os arquivos novos, modificados e excluídos
git commit -m "Your message"Fazer commit de todas as mudanças preparadas
git add -pEscolher de forma interativa só as mudanças da correção (aperte 'y' nos trechos da correção e 'n' nos da funcionalidade)
git commit -m "Fix login validation bug"Fazer commit só da correção
git add -AAgora preparar as mudanças restantes da funcionalidade
git commit -m "Add dark mode toggle"Fazer commit da funcionalidade separadamente
git statusVer o que está modificado e o que não é rastreado
git add -uPreparar só as modificações de arquivos rastreados
git statusConferir que os arquivos novos continuam não rastreados
git commit -m "Update existing files"Fazer commit sem os arquivos novos
git add -n .O dry-run mostra o que seria adicionado
git diffRevisar em detalhe as mudanças reais
git add .Se estiver tudo certo, preparar de verdade
git add dist/bundle.jsIsto falha - o arquivo é ignorado
git add -f dist/bundle.jsForçar a adição passa por cima do .gitignore
git commit -m "Add build for deployment"Fazer commit do arquivo normalmente ignorado
Teclas do modo interativo
Atalhos de teclado dos modos interativos do git add. Funcionam no modo patch (-p) e no modo interativo (-i).
Modo patch
-pModo interativo
-iSolução de problemas
O arquivo não é adicionado (ignorado)
Causa: O arquivo corresponde a um padrão do .gitignore
Procure o padrão correspondente no .gitignore. Use -f para forçar a adição, se for intencional.
git add -f <file>Erro “Permission denied”
Causa: O arquivo está bloqueado por outro processo ou você não tem permissão de leitura
Feche os aplicativos que usam o arquivo ou confira as permissões. Use --ignore-errors para continuar com os outros arquivos.
git add --ignore-errors .Nada acontece ao rodar git add
Causa: Talvez os arquivos já estejam preparados, ou não há mudanças para adicionar
Rode git status para ver o estado atual. Arquivos já preparados não são adicionados de novo.
git statusArquivos novos não aparecem no git diff
Causa: Arquivos não rastreados não aparecem no git diff por padrão
Use git add -N para marcar a intenção de adicionar; aí o git diff mostra o conteúdo.
git add -N <file> && git diffAviso sobre repositório git aninhado
Causa: Você está adicionando uma pasta que tem o próprio diretório .git (um repositório aninhado)
Remova a pasta .git aninhada, use submódulos do git ou silencie o aviso.
git add --no-warn-embedded-repo <folder>Os finais de linha continuam aparecendo como mudanças
Causa: Finais de linha inconsistentes (CRLF ou LF) entre o seu sistema e o repositório
Configure o .gitattributes com 'text=auto' e renormalize todos os arquivos.
git add --renormalize .Scripts (por ex. git diff-files) listam arquivos como modificados, mas o conteúdo não mudou
Causa: Os horários dos arquivos mudaram, então as informações de stat guardadas no índice estão desatualizadas
Atualize o índice para renovar as informações de stat sem preparar nada. (O git status atualiza automaticamente.)
git add --refresh .Dicas e armadilhas
Boas práticas
- ✓Revise as mudanças antes de prepará-las: use 'git diff' para ver o que você vai preparar, ou 'git add -p' para revisar de forma interativa.
- ✓Prepare juntas as mudanças relacionadas: agrupe em um único commit as mudanças logicamente relacionadas. Não misture correções de bugs com funcionalidades novas.
- ✓Use 'git add -p' para mudanças grandes: quando você fez várias mudanças sem relação em um arquivo, use o modo patch para prepará-las separadamente.
- ✓Confira o git status com frequência: sempre rode 'git status' antes e depois de preparar para verificar o que vai para o commit.
- ✓Cuidado com 'git add .': ele prepara tudo no diretório atual. Considere indicar arquivos específicos ou usar 'git add -p' para ter mais controle.
- ✓Configure o .gitignore primeiro: antes do seu primeiro 'git add', garanta que o .gitignore exclua artefatos de build, dependências e arquivos sensíveis.
- ✓Use o dry-run para conferir: na dúvida, use 'git add -n .' para ver o que seria preparado sem preparar nada.
- ✓Prepare exclusões explicitamente: excluir um arquivo localmente não prepara a exclusão. Use 'git add -u' ou 'git add -A' para incluir as exclusões.
Erros comuns
- ✗'git add .' ou 'git add -A': os dois preparam arquivos novos, modificados e excluídos, mas '.' só cobre o diretório atual para baixo, enquanto '-A' cobre a árvore de trabalho inteira.
- ✗Esquecer que 'git add' não faz commit. Os arquivos só ficam preparados e precisam de 'git commit' para serem registrados.
- ✗Adicionar arquivos que deveriam ser ignorados. Sempre confira o seu .gitignore antes de rodar 'git add -A' ou 'git add .'
- ✗Não revisar as mudanças antes de prepará-las. Use 'git add -p' para revisar com mais cuidado o que você prepara.
- ✗Confundir 'git add -u' com 'git add -A': '-u' só prepara modificações e exclusões de arquivos rastreados, não arquivos novos não rastreados.
Perguntas frequentes
Desde o Git 2.0 os dois preparam arquivos novos, modificados e excluídos. A diferença é o alcance: 'git add .' só cobre o diretório atual e os subdiretórios, enquanto 'git add -A' cobre o repositório inteiro, seja qual for o seu diretório atual.
Provavelmente o arquivo está listado no .gitignore. Confira com 'git check-ignore <file>'. Se precisar adicioná-lo mesmo assim, force com 'git add -f <file>'.
Sim! Use 'git restore --staged <file>' (ou 'git reset HEAD <file>' em versões antigas do Git) para tirar um arquivo da preparação sem perder as suas mudanças.
Use 'git add -p <file>' para entrar no modo patch interativo. O Git mostra cada mudança (hunk) e deixa você escolher quais preparar com y/n.
Isso costuma acontecer por mudanças de final de linha (CRLF/LF) ou de permissões. Veja o 'git diff' para saber o que mudou. Configure o .gitattributes para lidar com os finais de linha.
Primeiro adicione ao .gitignore os arquivos que quer excluir, depois use 'git add .'. Outra opção é adicionar os arquivos um a um ou usar padrões como 'git add *.js'.
Ele diz ao Git que você pretende adicionar o arquivo depois. O arquivo passa a ser rastreado (aparece no git diff), mas o conteúdo ainda não é preparado. Útil para revisar arquivos novos antes do commit.
Não, o Git só rastreia arquivos, não diretórios. A solução comum é colocar um arquivo .gitkeep ou .gitignore dentro do diretório vazio.