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:

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

BASH
# 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:


2. Status do arquivo

(1) Quatro estados do arquivo

Os arquivos no Git apresentam quatro estados principais:

100%
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:

100%
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

BASH
# 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:

TEXT 📖 Somente leitura
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:

Área de armazenamento temporário:

Área sem tampão:

Arquivos não rastreados:

▶ Exemplo: Análise da saída completa de status

BASH
# 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:

BASH
git status -s

O formato de saída consiste em duas colunas: tags e nomes de arquivos:

TEXT 📖 Somente leitura
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

▶ Exemplo: Comparando resultados detalhados e concisos

BASH
# 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:

100%
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:

BASH
# 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

BASH
# 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 status exibe 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 add antes 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 --staged ou git diff --cached para visualizar as alterações que você colocou na área de preparação. Se quiser visualizar a lista de arquivos, use git status -s para ver apenas os arquivos marcados à esquerda.

P: O que posso fazer se o git status estiver lento?

R: Em repositórios grandes, o git status pode ficar lento devido ao grande número de arquivos. Você pode usar o git status -s para obter uma saída concisa ou configurar o git config core.ignoreStat true para pular as verificações de status dos arquivos. Você também pode usar o git status --untracked-files=no para ignorar arquivos não rastreados.

P: Como posso impedir que determinados arquivos sejam exibidos pelo git status?

R: Crie um arquivo chamado .gitignore no diretório raiz do projeto e liste os padrões de arquivos a serem ignorados. Por exemplo, *.log ignora todos os arquivos de log, e node_modules/ ignora os diretórios de dependências. Os arquivos ignorados não aparecerão em git status.


📖 Resumo


📝 Exercícios

  1. 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 status para observar as mudanças de status em cada etapa e registre o processo de transição de status.

  2. Exercício avançado: Crie arquivos em vários estados (não rastreados, modificados, preparados, parcialmente preparados), compare a saída detalhada do git status com a saída concisa do git status -s e compreenda o significado dos marcadores de estado.

  3. Desafio: Escreva um script para analisar a saída do git status -s e 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.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%