Git: Verificando o status do Git e gerenciando o status dos…
git status é um dos comandos mais usados no Git. Ele ajuda você a entender o status do seu diretório de trabalho atual e a verificar quais arquivos foram modificados, quais foram adicionados à área de preparação e quais não estão sendo rastreados.
1. Visão geral do git status
(1) Por que é necessário verificar o status?
Em um fluxo de trabalho do Git, é preciso estar sempre atento ao seguinte:
- Quais arquivos foram modificados: Quais alterações foram feitas no espaço de trabalho?
- Quais arquivos foram colocados na área de preparação: Conteúdo pronto para ser confirmado
- Quais arquivos não são monitorados: arquivos recém-criados que ainda não foram gerenciados
- Ramo atual: Em qual ramo você está trabalhando?
- Relação com o Remote: Se está sincronizado com o Remote
O git status fornece todas essas informações e funciona como um “painel de controle” para os fluxos de trabalho do Git.
(2) Uso básico
# View Full Status
git status
# View Simplified View
git status -s
# Or
git status --short
(3) O valor das informações do Estado
As informações de status ajudam você a:
- Decida qual será o próximo passo: Adicionar, fazer commit ou enviar
- Evite deixar arquivos de fora: certifique-se de que todas as alterações sejam confirmadas
- Verificar o andamento do trabalho: Compreender a situação atual do trabalho
- Detectar alterações indesejadas: Identificar imediatamente os arquivos que não devem ser modificados
2. Status do arquivo
(1) Quatro estados do arquivo
Os arquivos no Git apresentam quatro estados principais:
stateDiagram-v2
[*] --> Untracked: Create a New File
Untracked --> Staged: git add
Untracked --> Untracked: Edit
Staged --> Committed: git commit
Committed --> Modified: Edit File
Modified --> Staged: git add
Staged --> Modified: Edit the temporary file
Committed --> Committed: git commit
(2) Explicação detalhada dos estados
| Status | Nome em inglês | Descrição | Cor de exibição | Ação recomendada |
|---|---|---|---|---|
| Não rastreado | Não rastreado | Novo arquivo, não rastreado pelo Git | Vermelho | Precisa ser adicionado com git add |
| Modificado | Modificado | Modificado, mas não marcado para envio | Vermelho | Precisa ser adicionado com git add |
| Preparado | Preparado | Adicionado à área de preparação | Verde | Pode ser submetido ao Git |
| Confirmado | Confirmado | Confirmado no repositório | Não exibido | Limpo |
(3) Processo de transição de estados
Compreender as transições de estado é fundamental para dominar o Git:
graph TB
A[Create a New File] -->|Untracked| B[Not Tracked Status]
B -->|git add| C[Saved]
C -->|git commit| D[Submitted status]
D -->|Edit File| E[Status: Modified]
E -->|git add| C
C -->|Edit the temporary file| F[Partial Cache<br/>MMStatus]
F -->|git add| C
style B fill:#f8d7da
style C fill:#d4edda
style D fill:#c3e6cb
style E fill:#fff3cd
style F fill:#e2e3e5
▶ Exemplo: Observando mudanças de estado
# Initialize the repository
mkdir status-demo && cd status-demo
git init
# Create a New File
echo "# Demo Project" > README.md
echo "console.log('Hello');" > app.js
# View Status - Not tracked
git status
# On branch main
#
# No commits yet
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# README.md
# app.js
#
# nothing added to commit but untracked files present
# Add a file to the staging area
git add README.md
# View Status - Partial Cache
git status
# On branch main
#
# No commits yet
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
# new file: README.md
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
# app.js
3. Explicação detalhada da saída de status
(1) Estrutura da saída
A saída do git status é dividida em várias partes:
On branch main ← Current branch
Your branch is up to date with 'origin/main'. ← Long-Distance Relationships
Changes to be committed: ← Saved Changes(Green)
(use "git restore --staged <file>..." to unstage)
modified: file1.txt
new file: file2.txt
Changes not staged for commit: ← Unsaved changes(Red)
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file3.txt
Untracked files: ← Untracked files(Red)
(use "git add <file>..." to include in what will be committed)
file4.txt
no changes added to commit ← Summary Information
(2) Compreender o significado de cada seção
Informações sobre a filial:
On branch main: Atualmente no ramo principalYour branch is ahead of 'origin/main' by 2 commits: O local está 2 commits à frente do remotoYour branch is behind 'origin/main' by 3 commits: O repositório local está 3 commits atrasado em relação ao repositório remoto
Área de armazenamento temporário:
- Essas alterações serão apresentadas durante a próxima sessão
git commit. - Exibido em verde (em terminais com capacidade para cores)
- Inclui arquivos novos, arquivos modificados e arquivos excluídos
Área sem tampão:
- O arquivo foi modificado, mas não foi adicionado à área de preparação
- Exibido em vermelho
- Você deve usar
git addpara enviar
Arquivos não rastreados:
- Novos arquivos desconhecidos pelo Git
- Exibido em vermelho
- Você deve usar
git addpara gerenciá-lo
▶ Exemplo: Análise da saída completa de status
# Creating Complex Scenes
git init
echo "# Project" > README.md
git add README.md
git commit -m "Initial commit"
# Create files in various states
echo "new file" > new.txt # Not tracked
echo "change" >> README.md # Edited but not saved
echo "staged" > staged.txt
git add staged.txt # New files that have been cached
echo "more" >> staged.txt # Saved and then modified
# View Full Status
git status
# On branch main
# Changes to be committed:
# new file: staged.txt
#
# Changes not staged for commit:
# modified: README.md
# modified: staged.txt
#
# Untracked files:
# new.txt
4. Visão geral do status
(1) Formato de saída conciso
Use as opções -s ou --short para obter uma saída concisa:
git status -s
O formato de saída consiste em duas colunas: tags e nomes de arquivos:
XY filename
(2) Significado dos indicadores de status
| Rótulo | Coluna X (Área temporária) | Coluna Y (Área de trabalho) | Descrição |
|---|---|---|---|
?? |
- | - | Arquivos não rastreados |
A |
Adicionado | - | Recém-adicionado ao ambiente de teste |
M |
Modificado | - | Modificado e salvo como rascunho |
M |
- | Modificado | Modificado, mas não salvo |
MM |
Modificado | Modificado | Passou pela fase de teste e depois foi modificado |
D |
Excluído | - | Excluído e salvo como rascunho |
D |
- | Excluído | Excluído, mas não salvo como rascunho |
AD |
Adicionado | Excluído | Excluído da área de trabalho após ter sido adicionado |
R |
Renomeado | - | Renomeado e salvo como rascunho |
C |
Copiado | - | Copiado e salvo temporariamente |
(3) As vantagens de uma apresentação concisa
- Visualização rápida: Veja todos os status de uma só vez
- Compatível com scripts: Fácil de analisar e processar
- Economia de espaço: Design compacto, ideal para dispositivos de usuários finais
- Codificação por cores: Manter os indicadores de cor (verde para itens em cache, vermelho para itens fora do cache)
▶ Exemplo: Comparando resultados detalhados e concisos
# Create Multiple States
echo "untracked" > file1.txt
echo "content" > file2.txt
git add file2.txt
echo "more" >> file2.txt
echo "tracked" > file3.txt
git add file3.txt
git commit -m "Add files"
echo "modified" >> file3.txt
# Detailed Output
git status
# On branch main
# Changes to be committed:
# new file: file2.txt
#
# Changes not staged for commit:
# modified: file3.txt
#
# Untracked files:
# file1.txt
# Concise Output
git status -s
# A file2.txt
# M file3.txt
# ?? file1.txt
5. Acompanhamento de mudanças de estado
(1) Mudanças típicas no estado do fluxo de trabalho
Vamos percorrer um fluxo de trabalho completo do Git:
sequenceDiagram
participant W as Workspace
participant S as Buffer
participant R as Repository
Note over W: 1. Create a New File
W->>W: Status: Untracked
Note over W,S: 2. git add
W->>S: Move to the staging area
S->>S: Status: Staged
Note over S,R: 3. git commit
S->>R: Commit to the repository
R->>R: Status: Committed
Note over W: 4. Edit File
W->>W: Status: Modified
Note over W,S: 5. git add
W->>S: Update the temporary storage area
S->>S: Status: Staged
Note over S,R: 6. git commit
S->>R: Submit Changes
R->>R: Status: Committed
(2) Status especial: parcialmente armazenado em cache
Quando um arquivo foi marcado para envio, mas novas alterações foram feitas na área de trabalho, ocorre um status especial:
# Create and stage a file
echo "version 1" > file.txt
git add file.txt
git status -s
# A file.txt
# Continue editing the file
echo "version 2" >> file.txt
git status -s
# AM file.txt
# AIndicates that it has been saved temporarily(version 1)
# MIndicates that there are new changes in the workspace(version 2)
# Add Again
git add file.txt
git status -s
# A file.txt
# The temporary storage area is currentlyversion 2
(3) A relação entre os comandos do State e do Git
| Status atual | Comandos disponíveis | Resultado |
|---|---|---|
| Não rastreado | git add |
Passa para a fase de preparação |
| Não rastreado | git clean |
Excluir arquivo |
| Modificado | git add |
Passa para a fase de preparação |
| Modificado | git restore |
Revertida a alteração; status alterado para “Confirmado” |
| Em fase de preparação | git commit |
Passa para o estado “Confirmado” |
| Preparado | git restore --staged |
Despreparar, alterar para “Modificado” ou “Não rastreado” |
| Confirmado | Editar arquivo | Marcado como modificado |
▶ Exemplo: Acompanhamento completo do fluxo de trabalho
# Initialization
git init status-workflow
cd status-workflow
# Steps1:Create a File(Untracked)
echo "# Project" > README.md
git status -s
# ?? README.md
# Steps2:Add to Stash(Staged)
git add README.md
git status -s
# A README.md
# Steps3:Submit(Committed)
git commit -m "Add README"
git status
# nothing to commit, working tree clean
# Steps4:Edit File(Modified)
echo "## Features" >> README.md
git status -s
# M README.md
# Steps5:Save Changes Temporarily(Staged)
git add README.md
git status -s
# M README.md
# Steps6:Revise Again(Partial Cache)
echo "## Usage" >> README.md
git status -s
# MM README.md
# Steps7:Commit Staged Changes
git commit -m "Add features"
git status -s
# M README.md (There are still changes to be made in the workspace.)
# Steps8:Submit the remaining changes
git add README.md
git commit -m "Add usage"
git status
# nothing to commit, working tree clean
❓ Perguntas Frequentes
P: Por que o
git statusexibe alguns arquivos em vermelho e outros em verde?R: A cor indica o status do arquivo. Verde significa que o arquivo está marcado para envio e será incluído no próximo commit. Vermelho significa que o arquivo não está marcado para envio (seja porque foi modificado ou porque não está sendo rastreado) e deve ser adicionado com
git addantes de poder ser enviado.
P: O que significa “working tree clean”?
R: Indica que a área de trabalho está limpa e não contém alterações não confirmadas. Todas as alterações foram confirmadas no repositório, e não há arquivos não rastreados, não adicionados à área de preparação ou adicionados à área de preparação, mas não confirmados. Esse é o estado ideal de trabalho.
P: Como faço para visualizar apenas os arquivos marcados para envio?
R: Use
git diff --stagedougit diff --cachedpara visualizar as alterações que você colocou na área de preparação. Se quiser visualizar a lista de arquivos, usegit status -spara ver apenas os arquivos marcados à esquerda.
P: O que posso fazer se o
git statusestiver lento?R: Em repositórios grandes, o
git statuspode ficar lento devido ao grande número de arquivos. Você pode usar ogit status -spara obter uma saída concisa ou configurar ogit config core.ignoreStat truepara pular as verificações de status dos arquivos. Você também pode usar ogit status --untracked-files=nopara ignorar arquivos não rastreados.
P: Como posso impedir que determinados arquivos sejam exibidos pelo
git status?R: Crie um arquivo chamado
.gitignoreno diretório raiz do projeto e liste os padrões de arquivos a serem ignorados. Por exemplo,*.logignora todos os arquivos de log, enode_modules/ignora os diretórios de dependências. Os arquivos ignorados não aparecerão emgit status.
📖 Resumo
git statusé o comando do Git mais utilizado, que ajuda a entender o status do seu diretório de trabalho atual- Os arquivos têm quatro estados: Não rastreado, Modificado, Preparado e Confirmado
- A exibição do status é dividida em três categorias: em fase de preparação, fora de fase de preparação e sem acompanhamento; a cor verde indica itens em fase de preparação e a cor vermelha indica itens fora de fase de preparação.
- A saída concisa
git status -sutiliza duas colunas para indicar o status, facilitando a leitura e tornando-a adequada para o processamento de scripts - Nas etiquetas de status XY, a coluna X representa o status da área temporária, e a coluna Y representa o status da área de trabalho.
- Compreender as transições de estado é fundamental para dominar o fluxo de trabalho do Git; cada estado corresponde a diferentes comandos disponíveis.
- “Parcialmente adicionado ao staging (status MM)” indica que o arquivo foi adicionado ao staging, mas há novas alterações no diretório de trabalho.
📝 Exercícios
-
Exercício básico: Crie um repositório Git. Crie um arquivo, adicione-o à área de preparação, faça o commit, modifique-o, adicione-o novamente à área de preparação e faça o commit novamente. Use
git statuspara observar as mudanças de status em cada etapa e registre o processo de transição de status. -
Exercício avançado: Crie arquivos em vários estados (não rastreados, modificados, preparados, parcialmente preparados), compare a saída detalhada do
git statuscom a saída concisa dogit status -se compreenda o significado dos marcadores de estado. -
Desafio: Escreva um script para analisar a saída do
git status -se contar o número de arquivos em cada estado (não rastreados, adicionados à área de preparação, modificados etc.) com o objetivo de verificar automaticamente o status do repositório.