git status
Aprenda como o comando git status funciona, leia sua saída longa e curta, use --short, --branch e --porcelain e veja o que cada estado significa.

O comando git status responde a uma única pergunta constante enquanto você trabalha: o que mudou desde meu último commit e o que está pronto para ser confirmado? É o comando que você executa mais do que qualquer outro — antes de preparar arquivos para o commit, antes de confirmar e sempre que você perde o controle da situação de um arquivo. Esta página explica os três estados em que um arquivo pode se encontrar, como ler a saída longa e a curta, e as opções que fazem o status funcionar bem em scripts.
O que o git status exibe
O git status mostra o estado de duas coisas: o diretório de trabalho (os arquivos em disco que você está editando) e a área de preparação (staging area), também chamada de index (o instantâneo que você está preparando para o próximo commit). Ele informa quais arquivos estão:
- Preparados (staged) — alterações adicionadas com git add e prontas para o próximo commit.
- Não preparados (modificados) — arquivos rastreados que você alterou, mas ainda não adicionou.
- Não rastreados (untracked) — novos arquivos que o Git nunca viu e não está acompanhando.
O que o git status não exibe é o histórico de commits. Ele não diz nada sobre commits anteriores, branches mescladas ou quem alterou o quê — para isso, use git log. Também não mostra o conteúdo das suas alterações; para ver as linhas exatas adicionadas e removidas, use git diff. Em resumo, o status resume o efeito de git add e git commit nos seus arquivos atuais.
Uso básico
O comando não recebe argumentos na sua forma mais comum:
git statusEm um repositório limpo, sem nada para fazer, o Git informa:
On branch master
nothing to commit, working tree cleanLendo a saída longa
A saída padrão (também acessível com --long) é o formato detalhado e legível por humanos. Acompanhe um arquivo ao longo de seu ciclo de vida para ver cada seção aparecer.
Um arquivo completamente novo que o Git nunca viu é não rastreado (untracked):
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
w3docs.txt
nothing added to commit but untracked files present (use "git add" to track)Após git add w3docs.txt, o mesmo arquivo passa para Changes to be committed — ele está agora preparado (staged):
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: w3docs.txtApós o git commit, a árvore de trabalho fica limpa novamente. Agora edite w3docs.txt e crie um segundo arquivo new.txt. Um arquivo rastreado que você alterar aparece em Changes not staged for commit, enquanto o arquivo completamente novo permanece em Untracked files:
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: w3docs.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
new.txt
no changes added to commit (use "git add" and/or "git commit -a")Observe que as dicas entre parênteses são sugestões reais e executáveis: o Git indica como remover da área de preparação, descartar ou adicionar em cada etapa.
O formato curto
Depois de entender o significado de cada seção, o formato longo torna-se verboso. A flag -s (ou --short) condensa tudo em uma linha por arquivo:
git status -sPara o estado acima (um arquivo rastreado modificado, um novo arquivo não rastreado) ele exibe:
M w3docs.txt
?? new.txtCada entrada tem um código de status de duas colunas. A coluna da esquerda é a área de preparação (o index) e a coluna da direita é a árvore de trabalho:
| Código | Significado |
|---|---|
?? | Arquivo não rastreado. |
A | Adicionado à área de preparação (novo arquivo preparado). |
M | Modificado. Esquerda = alteração preparada; direita = alteração não preparada. |
D | Excluído. |
R | Renomeado. |
Um espaço inicial significa "nenhuma alteração nessa coluna." Portanto, M significa modificado mas não preparado, M significa que a modificação está preparada e MM significa uma alteração preparada mais edições adicionais não preparadas no mesmo arquivo.
Adicione -b para também exibir o branch atual e suas informações de rastreamento:
git status -sb## master
M w3docs.txt
?? new.txtSaída para scripts: --porcelain
Se você quiser ler o git status a partir de um script, não analise o formato curto ou longo — ambos podem mudar entre versões do Git e são afetados pela configuração do usuário. Use --porcelain. Ele garante um formato estável e legível por máquina:
git status --porcelain M w3docs.txt
?? new.txtAs colunas usam os mesmos códigos de dois caracteres do formato curto, mas o formato é contratualmente estável, tornando-o seguro para hooks, verificações de CI e prompts de shell. Combine com -z para encerrar cada entrada com um byte NUL em vez de uma nova linha, o que mantém inequívocos os nomes de arquivos que contêm espaços ou novas linhas.
Exibindo arquivos ignorados
Por padrão, o git status oculta arquivos correspondidos pelas regras do seu .gitignore — artefatos de build e binários como .pyc, .obj, .exe ou arquivos de log, caso contrário, suprimiriam as alterações reais. Para confirmar que um arquivo está sendo ignorado (em vez de simplesmente esquecido), adicione --ignored:
git status --ignoredCom um .gitignore contendo *.log e um debug.log em disco, uma seção extra aparece:
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
debug.logEssa é a maneira mais rápida de depurar uma regra de ignore que está correspondendo mais — ou menos — do que o esperado.
Opções comuns
| Opção | Descrição |
|---|---|
-s, --short | Saída no formato curto, uma linha por arquivo. |
-b, --branch | Exibe o branch e as informações de rastreamento (funciona com o formato curto). |
--porcelain | Saída em um formato estável e fácil de analisar para scripts; ignora a configuração do usuário. |
--long | Saída no formato longo (o padrão). |
-u[<mode>], --untracked-files[=<mode>] | Controla arquivos não rastreados: no não exibe nenhum, normal exibe arquivos e diretórios, all também lista arquivos dentro de diretórios não rastreados. |
--ignored | Também exibe arquivos ignorados pelo .gitignore. |
--ignore-submodules[=<when>] | Ignora alterações em submódulos. <when> pode ser none, untracked, dirty ou all. |
-z | Encerra entradas com um byte NUL (implica --porcelain se nenhum formato for especificado). |
--column[=<options>], --no-column | Exibe arquivos não rastreados em colunas. |
Por que verificar o status frequentemente
É uma boa prática executar git status antes de cada git add e git commit. Uma verificação rápida evita erros comuns: confirmar um arquivo que você esqueceu de preparar, preparar acidentalmente um arquivo de depuração ou confirmar no branch errado. Como o status apenas lê o repositório e nunca altera nada, executá-lo é sempre seguro.
Depois de ler o status, os próximos passos naturais são inspecionar as alterações exatas com git diff, desfazer um erro de preparação com git reset ou, se ainda não começou, criar o repositório com git init.