Guia Rápido de Git: Comandos Essenciais para Dominar o Terminal

Guia Rápido de Git: Comandos Essenciais para Dominar o Terminal

Organizando e Gerenciando Múltiplos Stashes por Nome no Git

Associar mensagens explicativas aos stashes evita o acúmulo de código temporário anônimo e facilita a recuperação exata de trechos de trabalho pendentes. Essa abordagem permite criar, listar e aplicar alterações salvas de forma organizada ao alternar entre tarefas no repositório.

Bash

# Salva as alterações atuais criando um stash com descrição clara
git stash push -m "wip: ajustes na autenticação de dois fatores"

# Lista todos os stashes armazenados para identificar o índice desejado
git stash list
# Saída esperada:
# stash@{0}: On main: wip: ajustes na autenticação de dois fatores
# stash@{1}: On main: refatoração da camada de banco de dados

# Aplica o stash específico pelo seu identificador mantendo o registro na pilha
git stash apply stash@{0}

Pontos-chave:

  • Sintaxe Atualizada: Prefira git stash push -m "mensagem" ao antigo git stash save, que foi descontinuado nas versões recentes do Git.
  • Múltiplos Registros: O comando git stash list exibe todos os itens empilhados no formato stash@{n}, sendo 0 o mais recente.
  • Diferença de Comandos: O git stash apply restaura as alterações e preserva o stash na lista, enquanto git stash pop aplica e remove o item.
  • Inclusão de Untracked: Por padrão, arquivos novos não rastreados são ignorados; adicione a flag -u para incluí-los no stash (git stash push -u -m "mensagem").

git, git-stash, version-control, devops, fluxo-de-trabalho, terminal

Removendo Arquivos e Diretórios Não Rastreados do Projeto

A limpeza do workspace remove arquivos e pastas gerados durante testes ou compilações que ainda não foram adicionados ao controle de versão. Essa prática restaura o repositório a um estado limpo sem afetar os arquivos já rastreados.

Bash

# Simula a remoção sem deletar nada (dry run de segurança)
git clean -fdn
# Would remove build/
# Would remove temp_test.log

# Executa a limpeza definitiva de arquivos e diretórios não rastreados
git clean -fd
# Removing build/
# Removing temp_test.log

# Garante que o status do diretório de trabalho está totalmente limpo
git status
# On branch main
# nothing to commit, working tree clean

Pontos-chave:

  • Combinação de Flags: A flag -f (force) confirma a exclusão, enquanto -d inclui diretórios não rastreados no processo de remoção.
  • Ação Irreversível: Os arquivos apagados pelo git clean não vão para a lixeira do sistema operacional nem podem ser recuperados pelo Git.
  • Modo de Prevenção: Sempre execute com a flag -n (git clean -fdn) antes do comando definitivo para inspecionar a lista de itens atingidos.
  • Arquivos Ignorados: Por padrão, o comando preserva os itens listados no .gitignore; para remover também arquivos ignorados, utilize a flag -x.

git, git-clean, version-control, terminal, devops, limpeza-codigo

Mapeando Alterações por Linha com Git Blame

Identificar o autor e o commit exato de cada linha de código é essencial para entender o contexto histórico e a evolução de um arquivo. O comando git blame exibe o hash, a autoria e a data da última modificação em nível de linha.

Bash

# Exibe o histórico de alterações linha por linha de um arquivo
git blame src/services/api.js

# Limita a análise a um intervalo de linhas específico (ex: linhas 10 a 20)
git blame -L 10,20 src/services/api.js
# Saída esperada:
# a1b2c3d4 (Carlos Silva 2026-03-10 14:22:10 -0300 10) const API_URL = "https://api.v1";
# e5f6g7h8 (Ana Souza   2026-05-18 09:15:43 -0300 11) async function fetchData() {

Pontos-chave:

  • Foco em Trechos: A flag -L inicio,fim restringe a varredura a blocos de código específicos, otimizando a leitura do terminal.
  • Inspecionando o Commit: O hash retornado no início de cada linha pode ser copiado e inspecionado em detalhes com git show <hash>.
  • Ignorando Formatação: Utilize a flag -w para ignorar alterações puramente estéticas de espaço em branco durante a análise.
  • Movimentação de Código: Com a flag -C, o Git tenta rastrear a linha de origem mesmo que o código tenha sido movido de outro arquivo.

git, git-blame, auditoria, version-control, terminal, inspecao-codigo

Isolando Regressões no Histórico com Busca Binária

Encontrar a origem de uma falha em projetos com centenas de commits pode ser um processo demorado se feito manualmente. O git bisect automatiza a varredura aplicando busca binária no histórico de commits para localizar o trecho exato onde o bug foi introduzido.

Bash

# Inicia a sessão de busca binária
git bisect start

# Marca o commit atual (HEAD) como quebrado/com bug
git bisect bad

# Marca um commit anterior conhecido onde tudo funcionava corretamente
git bisect good a1b2c3d

# O Git alterna automaticamente para os commits intermediários para teste.
# Após testar o código em cada etapa, informe o estado ao Git:
git bisect good  # Se o commit testado estiver funcionando
# ou
git bisect bad   # Se o bug persistir no commit testado

# Ao encontrar o commit causador, encerre o processo e volte à branch original
git bisect reset

Pontos-chave:

  • Eficiência Algorítmica: Reduz o número de testes necessários aplicando divisão binária, inspecionando milhares de commits em poucas etapas.
  • Automação de Testes: É possível automatizar a checagem passando um script de teste diretamente no comando: git bisect run npm test.
  • Restauração do Estado: O comando git bisect reset garante o retorno ao ponto de origem antes da navegação pelo histórico.
  • Invariabilidade de Testes: Mantenha os critérios de validação estritamente idênticos a cada etapa para não desviar a busca do algoritmo.

git, git-bisect, debugging, qa, version-control, automacao

Inspecionando Alterações Não Commitadas com Git Diff

Verificar as modificações pendentes no diretório de trabalho evita o envio acidental de arquivos temporários ou código incompleto ao repositório. O git diff compara o estado atual dos arquivos com a área de staging ou com o último commit realizado.

Bash

# Compara o código modificado na Working Tree com a Staging Area
git diff

# Compara apenas arquivos já adicionados na Staging Area (git add) com o último commit
git diff --staged

# Compara as alterações de um arquivo específico
git diff src/config/database.js

Pontos-chave:

  • Diferença de Escopo: O comando simples analisa alterações não adicionadas com git add, enquanto --staged (ou --cached) analisa o que já está pronto para o commit.
  • Análise de Estatísticas: A flag --stat exibe um resumo resumido com o número de linhas adicionadas e removidas por arquivo.
  • Filtro por Arquivo: Passar o caminho do arquivo limita a saída do terminal ao contexto de interesse.
  • Navegação no Terminal: A saída do diff utiliza o leitor padrão do sistema (como o less); pressione a tecla q para sair da visualização.

git, git-diff, code-review, version-control, terminal, devops

Replicando Commits Específicos Entre Branches com Cherry-Pick

Incorporar correções urgentes de uma branch de desenvolvimento em produção sem transportar todo o histórico adjacente é um desafio comum em equipes ágeis. O git cherry-pick copia a alteração contida em um commit específico e a aplica diretamente sobre a branch atual.

Bash

# Alterna para a branch de destino (ex: produção/main)
git switch main

# Aplica o commit desejado informando seu hash
git cherry-pick e5f6g7h8

# Em caso de conflito, resolva os arquivos e continue a aplicação:
git add .
git cherry-pick --continue

Pontos-chave:

  • Aplicações Pontuais: Ideal para aplicar hotfixes desenvolvidos em branches paralelas sem realizar o merge completo de histórico.
  • Novo Hash Gerado: O cherry-pick recria o commit na branch de destino, gerando um novo identificador hash único.
  • Múltiplos Commits: É possível aplicar uma sequência de commits especificando o intervalo: git cherry-pick hash1..hash2.
  • Abortar Operação: Caso ocorram conflitos complexos, cancele a operação com segurança usando git cherry-pick --abort.

git, git-cherry-pick, version-control, devops, gerenciamento-codigo, git-flow

Reorganizando o Histórico com Rebase Interativo

Históricos poluídos por múltiplos commits intermediários dificultam a leitura e a revisão de código por outros desenvolvedores. O rebase interativo (git rebase -i) permite unir, reescrever, reordenar ou remover commits antes de integrá-los à branch principal.

Bash

# Inicia a reordenação dos últimos 3 commits da branch atual
git rebase -i HEAD~3

# O editor de texto padrão abrirá com a lista de commits:
# pick a1b2c3d Ajuste inicial da API
# squash e5f6g7h Refatoração das rotas
# squash i9j0k1l Correção do retorno JSON

# Salve o arquivo para consolidar os commits marcados como 'squash' em um único

Pontos-chave:

  • Comando Squash: A opção squash (ou s) funde o commit marcado com o commit imediatamente anterior, combinando as mensagens.
  • Comando Reword: A opção reword (ou r) permite alterar apenas a mensagem de um commit antigo da lista.
  • Regra de Ouro: Nunca aplique rebase em commits que já foram enviados para branches públicas/compartilhadas.
  • Cancelamento Seguro: Para interromper o processo em caso de erro, execute git rebase --abort.

git, git-rebase, clean-code, version-control, devops, git-workflow

Renderizando a Árvore de Commits no Terminal

Visualizar a ramificação e o fluxo de merges diretamente na linha de comando elimina a necessidade de ferramentas gráficas para entender o estado do repositório. O comando git log configurado com formatação em gráfico exibe o histórico de maneira simplificada.

Bash

# Exibe a árvore de commits formatada com linhas de ramificação
git log --graph --oneline --all

# Saída esperada no terminal:
# * e5f6g7h (HEAD -> main) docs: atualiza README
# |\  
# | * a1b2c3d (feature/auth) feat: adiciona login com JWT
# |/  
# * i9j0k1l chore: estrutura inicial do projeto

Pontos-chave:

  • Estrutura Visual: A flag --graph desenha a árvore de branches usando caracteres ASCII na lateral esquerda.
  • Resumo em Linha Única: A flag --oneline reduz cada commit a seu hash curto e mensagem principal, otimizando o espaço da tela.
  • Visão Global: A flag --all garante a exibição de todas as branches locais e remotas, e não apenas da branch ativa.
  • Atalho Permanente: Esse comando é frequentemente configurado como um alias do Git para acesso rápido no terminal.

git, git-log, terminal, version-control, devops, visualizacao

Atualizando a Mensagem do Último Commit Realizado

Erros de digitação ou o esquecimento de pequenas alterações logo após a execução de um commit são falhas simples de corrigir no Git. O comando git commit --amend permite alterar a mensagem do último commit ou incluir arquivos esquecidos na mesma publicação.

Bash

# Adiciona um arquivo esquecido à área de staging
git add src/utils/helper.js

# Reescreve o último commit alterando a mensagem e incluindo as novas alterações
git commit --amend -m "feat: implementa validação do formulário e funções auxiliares"

Pontos-chave:

  • Substituição de Commit: O Git não altera o commit existente, mas cria um novo commit que substitui o anterior, alterando seu hash.
  • Escopo Local: Utilize a alteração apenas em commits que ainda não foram enviados ao servidor remoto com git push.
  • Sem Alterar Arquivos: Para corrigir apenas o texto da mensagem sem adicionar novos arquivos, use git commit --amend -m "nova mensagem".
  • Ajuste de Autoria: É possível alterar a autoria do último commit adicionando a flag --author="Nome <email>".

git, git-commit, version-control, devops, produtividade, terminal

Definindo Atalhos Personalizados no Git

Digitar comandos longos e repletos de flags no terminal reduz a produtividade no desenvolvimento diário. Criar atalhos globais através do git config reduz sequências de comandos a palavras simples e fáceis de memorizar.

Bash

# Configura um atalho para visualização simplificada do log
git config --global alias.lg "log --graph --oneline --all"

# Configura um atalho para o checkout/switch de criação de branch
git config --global alias.cob "switch -c"

# Executando o novo atalho criado
git lg

Pontos-chave:

  • Escopo Global: A flag --global salva as regras no arquivo ~/.gitconfig do seu usuário no sistema operacional, aplicando a todos os repositórios.
  • Chave de Execução: Atalhos são invocados diretamente após a palavra git (ex: git cob nova-branch).
  • Comandos Externos: É possível mapear comandos do terminal do sistema iniciando o valor com !, como alias.st "!git status -s".
  • Edição Direta: É possível visualizar e editar todos os aliases abrindo o arquivo de configuração com git config --global --edit.

git, git-config, terminal, produtor-de-conteudo, produtividade, devops

Inspecionando Regras de Bloqueio do Gitignore

Entender por que um arquivo específico está sendo ignorado pelo Git ou descobrir qual regra do arquivo .gitignore afetou o rastreamento evita comportamentos inesperados no repositório. O git check-ignore aponta a linha exata que está aplicando o bloqueio.

Bash

# Verifica qual regra do gitignore está afetando o arquivo
git check-ignore -v config/database.env

# Saída esperada no terminal:
# .gitignore:12:*.env    config/database.env

Pontos-chave:

  • Saída Detalhada: A flag -v (verbose) mostra o caminho do arquivo de regras, o número da linha correspondente e o padrão ativado.
  • Diagnóstico de Conflitos: Útil para identificar sobreposições entre regras globais (~/.gitignore_global) e locais do projeto.
  • Múltiplos Arquivos: O comando aceita padrões wildcard para testar diretórios inteiros: git check-ignore -v logs/*.
  • Verificação de Adição: Se o comando não retornar nenhuma saída, significa que o arquivo não está sendo bloqueado por regras de ignore.

git, gitignore, troubleshooting, version-control, devops, terminal

Otimizando Downloads de Repositórios com Clone Raso

Baixar repositórios extensos que contêm anos de histórico pode ser uma operação lenta e consumir muita largura de banda. O clone raso (shallow clone) limita o download apenas aos commits mais recentes do projeto.

Bash

# Clona o repositório baixando apenas o último commit do histórico
git clone --depth 1 https://github.com/usuario/repositorio.git

# Acessa o diretório clonado com histórico reduzido
cd repositorio
git log --oneline
# Exibe apenas o último commit baixado

Pontos-chave:

  • Desempenho Elevado: Reduz drasticamente o tempo de clone e a transferência de dados, sendo ideal para ambientes de CI/CD.
  • Aprofundando o Histórico: É possível buscar mais commits posteriormente conforme a necessidade executando git fetch --depth 10.
  • Restauração Completa: Para converter o repositório em um clone tradicional completo, execute git fetch --unshallow.
  • Limitação de Operações: Algumas operações complexas de blame ou bisect podem exigir o histórico completo para funcionarem adequadamente.

git, git-clone, devops, ci-cd, desempenho, version-control

Limpando Referências Locais de Branches Remotas

Quando ramificações são excluídas ou mescladas diretamente na plataforma de hospedagem (como GitHub ou GitLab), o repositório local pode continuar mantendo referências desatualizadas a essas branches remotas. O comando git remote prune remove essas pontas obsoletas.

Bash

# Remove as referências locais a branches que já foram deletadas no servidor remoto
git remote prune origin

# Saída esperada:
# Pruning origin
# URL: https://github.com/usuario/repositorio.git
#  * [pruned] origin/feature/login

Pontos-chave:

  • Limpeza de Apontamentos: Remove as chamadas remote-tracking branches (ex: origin/feature-deletada) do seu ambiente local.
  • Segurança de Código: O comando não apaga branches locais que você criou no seu computador, apenas os espelhamentos do servidor.
  • Automação no Fetch: É possível configurar a limpeza automática em todo git fetch executando git config --global fetch.prune true.
  • Simulação Próvia: A flag --dry-run permite listar quais referências seriam removidas antes de confirmar a execução.

git, git-remote, devops, manutencao, version-control, terminal

Comparando Alterações Entre Branches Diferentes

Analisar a diferença pontual entre duas branches ajuda a entender o que será integrado ao código antes de realizar uma fusão. A sintaxe de dois pontos do git diff expõe todas as modificações de arquivos presentes entre os dois contextos.

Bash

# Exibe a diferença direta de código entre as branches 'main' e 'feature/pagamento'
git diff main..feature/pagamento

# Lista apenas os nomes dos arquivos alterados entre as duas branches
git diff --name-only main..feature/pagamento

Pontos-chave:

  • Sintaxe de Comparação: A notação branch1..branch2 compara o topo (HEAD) da primeira branch diretamente com o topo da segunda.
  • Comparação pela Origem: A notação com três pontos (branch1...branch2) mostra as alterações na branch2 desde o ancestral comum com a branch1.
  • Filtros por Nome: A flag --name-status exibe os arquivos modificados acompanhados do status de adição (A), alteração (M) ou remoção (D).
  • Inspeção de Arquivo Único: Adicione o caminho no final do comando para restringir a comparação a um arquivo específico: git diff branch1..branch2 src/app.js.

Thales de Oliveira Gomes

Thales de Oliveira Gomes é gestor de Tecnologia da Informação, especialista em infraestrutura de redes, computação em nuvem e operações de TI hospitalar, com mais de 18 anos de experiência na área. Graduado em Gestão de TI e pós-graduado em Engenharia de Redes e Telecomunicações, Cloud Computing, Redes de Computadores e Gestão Hospitalar, construiu uma trajetória sólida liderando projetos de alta complexidade, como a implementação e migração para nuvem de sistemas ERP de grande porte. Sua atuação no setor o levou a ser indicado ao prêmio IT Leaders Brasil na categoria Rising Leaders. Além da carreira corporativa e da paixão por tecnologia, Thales é autor independente com mais de 70 obras publicadas sobre redes, segurança da informação, Linux e física, além de criador de conteúdo no blog Vetor Tech e na plataforma CiberDicas. No universo das artes e do entretenimento, atua como produtor de música eletrônica sob o projeto Yknex, cria ilustrações digitais e compartilha walkthroughs de games no YouTube.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *