🐙 Git e GitHub CLI

Multilingual DevOps cheat sheet: Linux, Docker, Git, Kubernetes, Helm, Terraform, practical scenarios & templates.
Data de Publicação

31 de agosto de 2025

Comandos básicos e avançados do Git para controle de versão, ramificação, repositórios remotos, stash, tags e GitHub CLI.

🔹 Comandos Básicos

Comando

Exemplo

Descrição

git add Adicionar um arquivo à área de staging
git add file.txt

Preparar um arquivo específico para o próximo commit

git add .

Preparar todas as mudanças no diretório atual e abaixo

git add -p

Escolher interativamente quais partes dos arquivos preparar (útil para commits parciais)

git clone Clonar um repositório em um novo diretório
git clone -b branch_name URL

Clonar apenas o branch especificado (em vez do padrão)

git clone --depth 1 URL

Clonar apenas o último commit, criando uma cópia superficial para economizar tempo e espaço

git commit Registrar alterações no repositório
git commit -m "Initial commit"

Fazer commit com uma mensagem sem abrir o editor

git commit -a -m "Fix bugs"

Preparar e commitar todos os arquivos rastreados modificados com uma mensagem

git commit --amend

Atualizar o último commit (alterar mensagem ou incluir mais mudanças)

git commit --fixup abc1234

Criar um commit de correção (fixup) para ser automaticamente squashado depois durante o rebase interativo

git config Obter e definir opções do repositório ou globais
git config --global user.name "Name"

Definir nome de usuário global do Git

git config --global user.email "email@example.com"

Definir email global do Git

git config --list

Listar todas as configurações do Git (nome, email, editor, etc.)

git diff Mostrar alterações entre commits, commit e diretório de trabalho, etc.
git diff HEAD

Mostrar o que você alterou desde o último commit (mudanças não preparadas)

git diff --staged

Mostrar o que será incluído no próximo commit

git diff --word-diff HEAD~1

Mostrar alterações com diferenças em nível de palavra

git grep Pesquisar dentro dos arquivos do repositório
git grep "functionName"

Encontrar todas as menções de functionName em todos os arquivos do projeto

git grep -n "TODO"

Encontrar linhas contendo TODO e mostrar números de linha (útil para encontrar anotações no código)

git grep -i "login"

Pesquisar pela palavra login sem diferenciar maiúsculas de minúsculas

git init Criar um repositório Git vazio ou reinicializar um existente
git init my-project

Inicializar um novo repositório no diretório my-project

git init --bare

Inicializar um repositório bare

git log Mostrar histórico de commits
git log --oneline

Mostrar histórico de commits em formato compacto de uma linha

git log --graph --all

Mostrar todos os branches em um gráfico visual de commits

git log -p --stat

Mostrar patch e estatísticas de alterações de arquivos para commits

git reset Remover arquivos da área de staging, mantendo mudanças no diretório de trabalho
git reset HEAD file.txt

Remover um arquivo do staging (mantém suas edições)

git reset --hard HEAD~1

Voltar um commit e excluir todas as mudanças (irreversível!)

git reset --soft HEAD~1

Desfazer o último commit mas manter as alterações prontas para novo commit

git reset --mixed HEAD~1

Desfazer um commit mas manter as mudanças fora do staging no diretório de trabalho

git show Mostrar vários tipos de objetos
git show <commit_hash>

Mostrar mudanças e mensagem de um commit específico

git show HEAD~1

Mostrar o commit anterior ao atual

git show --stat

Mostrar um resumo das alterações de arquivos do último commit

git status Mostrar o status da árvore de trabalho
git status -s

Mostrar status em formato curto

git status -b

Mostrar branch atual e status dos arquivos

🌿 Ramificação e Merge

Comando

Exemplo

Descrição

git branch Criar, listar ou excluir branches
git branch new-feature

Criar um novo branch chamado new-feature

git branch -d old-feature

Excluir um branch local chamado old-feature

git checkout Trocar de branch ou restaurar arquivos de outro commit
git checkout main

Trocar para o branch main

git checkout -b new-branch

Criar e trocar para um novo branch chamado new-branch

git switch Trocar de branch (alternativa simplificada ao checkout)
git switch main

Trocar para o branch main

git switch -c feature-x

Criar e trocar para um novo branch chamado feature-x

git switch new-feature

Trocar para um branch existente chamado new-feature

git merge Combinar alterações de outro branch no atual
git merge new-feature

Fazer merge do branch new-feature no branch atual

git merge --no-ff new-feature

Sempre criar um commit de merge (mesmo se fast-forward for possível)

git merge --abort

Cancelar o merge e reverter alterações se ocorrerem conflitos

git rebase Mover ou reaplicar commits em cima de um novo commit base
git rebase main

Reaplicar os commits do seu branch em cima do branch main

git rebase -i HEAD~3

Editar interativamente os últimos 3 commits

git rebase --abort

Parar e desfazer um rebase em andamento

git rebase -i --autosquash HEAD~5

Squash automático de commits marcados como fixup ou squash durante rebase interativo

git cherry-pick Aplicar commits específicos de outro branch
git cherry-pick <hash>

Aplicar um commit específico (por hash) ao branch atual

git cherry-pick --continue

Continuar cherry-pick após resolver conflitos

git cherry-pick A^..B

Aplicar um intervalo de commits de A (excluindo) a B (incluindo)

📡 Repositórios Remotos

Comando

Exemplo

Descrição

git remote Gerenciar links para repositórios remotos (como GitHub)
git remote -v

Mostrar nomes e URLs dos remotos

git remote add origin URL

Adicionar um repositório remoto chamado origin

git pull Baixar e mesclar automaticamente mudanças de um branch remoto
git pull origin main

Buscar e mesclar mudanças do branch remoto main no seu branch atual

git pull --rebase origin main

Buscar e rebasear seu branch atual em cima do remoto em vez de mesclar

git push Enviar suas alterações locais para um repositório remoto
git push origin main

Enviar seu branch local main para o remoto origin

git fetch Baixar mudanças do remoto sem mesclar
git fetch origin

Buscar todas as atualizações do remoto origin, mas não aplicá-las ainda

git fetch origin main

Buscar apenas o branch main do remoto

git fetch --all

Buscar atualizações de todos os remotos

git fetch --prune

Limpar branches deletados — remover refs locais para branches que foram excluídos remotamente

git fetch --dry-run

Mostrar o que seria buscado, sem realmente baixar nada

git fetch origin +main

Atualizar forçadamente seu branch de rastreamento local (origin/main), sobrescrevendo conflitos

📦 Stash e Limpeza

Comando

Exemplo

Descrição

git stash Salvar temporariamente alterações não commitadas (trabalho em andamento)
git stash

Salvar arquivos modificados e staged, depois reverter diretório de trabalho para o último commit

git stash apply

Reaplicar as últimas alterações armazenadas (stash permanece salvo)

git stash pop

Reaplicar e remover o último stash

git stash list

Mostrar lista de todas as alterações salvas (stashed)

git stash branch feature-fix

Criar um novo branch e aplicar o último stash nele

git clean Excluir permanentemente arquivos não rastreados (fora do Git)
git clean -f

Excluir arquivos não rastreados no diretório atual

git clean -fd

Excluir arquivos e pastas não rastreados

git clean -n

Pré-visualizar o que será excluído (dry run seguro)

🏷️ Tags

Comando

Exemplo

Descrição

git tag Criar, listar ou excluir tags para marcar pontos específicos na história (como releases)
git tag -a v1.0 -m "Version 1.0"

Criar uma tag anotada chamada v1.0 com mensagem (salva como objeto completo do Git, ideal para releases)

git tag -d v1.0

Excluir a tag local chamada v1.0 (não afeta o remoto)

git push Enviar commits, branches e tags do local para o repositório remoto
git push origin --tags

Enviar todas as tags locais para o remoto (útil após criar múltiplas versões)

git push origin v1.0

Enviar uma tag específica (ex.: v1.0) para o repositório remoto

git push origin :refs/tags/v1.0

Excluir a tag remota v1.0 (observe a sintaxe com dois pontos)

🛠️ Resolução de Conflitos

Comando

Exemplo

Descrição

git mergetool Abrir uma ferramenta visual para ajudar a resolver conflitos de merge
git mergetool --tool=meld

Usar uma ferramenta de merge específica (como Meld) para resolver conflitos

git rerere Permitir que o Git se lembre de como você resolveu conflitos de merge antes
git config --global rerere.enabled true

Ativar reuso automático de resoluções anteriores de conflitos

git rerere status

Mostrar quais arquivos têm resoluções salvas

git rerere diff

Mostrar quais alterações o Git salvou para reuso futuro

⚙️ Comandos Avançados

Comando

Exemplo

Descrição

git bisect Usar busca binária para encontrar o commit que introduziu um bug
git bisect start

Iniciar busca binária entre um commit bom e um ruim conhecido para localizar um bug

git bisect bad

Marcar o commit atual como “ruim” (contém o bug)

git bisect good <commit>

Marcar um commit conhecido como “bom”, onde o bug não existia

git blame Mostrar quem modificou pela última vez cada linha de um arquivo, com revisão e autor
git blame file.txt

Mostrar autor e informações de commit para cada linha do arquivo

git blame -L 10,20 file.txt

Mostrar informações de blame apenas das linhas 10 a 20

git blame --show-email file.txt

Mostrar emails dos autores junto às alterações

git reflog Visualizar e gerenciar o reflog de movimentações de branch e HEAD
git reflog show main@{1.week.ago}

Ver onde o branch main apontava uma semana atrás

git reflog expire --expire=30.days --dry-run

Pré-visualizar quais entradas de reflog mais antigas que 30 dias podem ser limpas

git reflog delete HEAD@{2}

Excluir uma entrada específica do reflog (use com cuidado, pode afetar recuperação)

git submodule Adicionar, inicializar, atualizar ou inspecionar submódulos (repositórios dentro de repositórios)
git submodule add URL path

Adicionar um repositório externo como submódulo em um caminho específico

git submodule update --init

Inicializar e baixar todos os submódulos listados no repositório

git submodule foreach git pull

Executar git pull dentro de cada submódulo para atualizá-los

git submodule sync --recursive

Sincronizar URLs de submódulos após mudanças no arquivo .gitmodules

git submodule update --remote --merge

Atualizar submódulos para o último commit de seus branches remotos

git archive Criar um arquivo (zip, tar, etc.) dos arquivos de um commit ou branch específico
git archive --format=zip HEAD > archive.zip

Criar um arquivo ZIP dos arquivos do projeto no HEAD

git archive -o release.tar.gz HEAD

Criar um arquivo .tar.gz compactado a partir do HEAD atual

git archive --format=tar --prefix=project/ HEAD \| gzip > project.tar.gz

Criar um arquivo .tar.gz compactado do projeto atual, colocando todos os arquivos em uma pasta chamada project/ dentro do arquivo

git gc Limpar arquivos desnecessários e otimizar o repositório para desempenho
git gc --aggressive

Executar uma limpeza e otimização completa (pode ser lenta mas eficaz)

git gc --prune=now

Remover imediatamente todos os objetos inalcançáveis (perigoso se não tiver certeza)

git shortlog Resumo rápido de autores e seus commits
git shortlog -e

Mostrar uma lista de autores com seus emails (ex.: para analisar quem contribuiu e quanto)

git shortlog -s -n

Mostrar quantos commits cada autor fez, ordenados por número de commits

git shortlog -sne

Mesmo que acima, mas incluindo nomes e emails — útil para rastreamento detalhado de atividade

git revert Criar um novo commit que desfaz alterações de um commit anterior sem reescrever o histórico
git revert HEAD

Desfazer o último commit criando um novo commit que reverte suas mudanças

git revert <commit_hash>

Desfazer um commit específico por hash, adicionando com segurança um novo commit que o reverte

🐙 GitHub CLI

gh permite gerenciar o GitHub a partir do terminal.

Comando

Exemplo

Descrição

gh auth login Autenticar-se em um host GitHub para permitir que comandos CLI interajam com sua conta
gh auth login --with-token < mytoken.txt

Autenticar usando um token de acesso pessoal armazenado em um arquivo (mytoken.txt)

gh auth login --hostname enterprise.internal

Autenticar em um servidor GitHub Enterprise (não github.com)

gh repo clone Clonar um repositório GitHub para sua máquina local
gh repo clone user/repo

Clonar o repositório repo pertencente a user em uma pasta chamada repo

gh repo clone cli/cli -- --depth=1

Clonar o repositório mas baixar apenas o commit mais recente, criando uma cópia superficial mais rápida e leve

gh repo clone cli/cli workspace/cli

Clonar o repositório em uma pasta personalizada workspace/cli

gh issue list Listar issues em um repositório GitHub, opcionalmente filtradas por vários critérios
gh issue list --assignee "@me"

Listar issues atribuídas a você

gh issue list --state all

Listar issues independentemente do estado (abertas ou fechadas)

gh issue list --search "error no:assignee sort:created-asc"

Listar issues que contenham “error”, não atribuídas, ordenadas por data de criação ascendente

gh pr create Criar um pull request no GitHub via CLI
gh pr create --title "..."

Criar um pull request com o título fornecido

gh pr create --project "Roadmap"

Vincular o pull request a um projeto GitHub chamado “Roadmap”

gh pr create --base develop --head monalisa:feature

Criar um PR do branch feature no fork monalisa para o branch develop

gh repo create Criar um novo repositório GitHub via CLI
gh repo create my-project

Criar um novo repositório chamado my-project no GitHub (prompts interativos a seguir)

gh repo create my-project --public --clone

Criar um repositório público e cloná-lo localmente

gh repo create my-project --private --source=. --remote=upstream

Criar um repositório remoto privado a partir da pasta atual e adicionar remoto chamado upstream

💡 Atalhos Git (Aliases Úteis)

Configure aliases convenientes para acelerar comandos Git comuns:

git config --global alias.br branch                                       # atalho para: git branch
git config --global alias.ci commit                                       # atalho para: git commit
git config --global alias.co checkout                                     # atalho para: git checkout
git config --global alias.graph "log --oneline --graph --all --decorate"  # histórico bonito em forma de gráfico
git config --global alias.last "log -1 HEAD"                              # mostrar o último commit
git config --global alias.st status                                       # atalho para: git status

🚀 Comandos Avançados de Git para Profissionais

Comando

Exemplo

Descrição

git filter-repo Uma ferramenta poderosa e eficiente para reescrever o histórico do Git, removendo ou modificando arquivos, autoria ou caminhos; substitui o git filter-branch com mais velocidade e segurança
git filter-repo --path secret.txt --invert-paths

Reescrever de forma eficiente o histórico do repositório para remover arquivos ou diretórios sensíveis sem os problemas de desempenho do git filter-branch. Use com cuidado

git filter-repo --replace-text replacements.txt

Substituir em massa strings ou padrões em todo o histórico (ex.: sanitizar credenciais)

git filter-repo --subdirectory-filter src

Extrair histórico de um subdiretório em um novo repositório, preservando metadados de commits

git worktree Gerenciar múltiplos diretórios de trabalho vinculados a um único repositório, permitindo trabalhar em diferentes branches simultaneamente sem clonar
git worktree add ../feature feature-branch

Criar um diretório de trabalho adicional anexado ao mesmo repositório, permitindo checkouts paralelos de branches sem clones

git worktree list

Listar todos os worktrees ativos, seus caminhos e branches associados

git worktree remove ../feature

Remover um worktree vinculado quando não for mais necessário, limpando diretórios com segurança

git replace Criar referências temporárias que substituem objetos existentes, permitindo manipulação de histórico local não destrutiva para testes
git replace <old_commit> <new_commit>

Trocar temporariamente um commit por outro em seu repositório local, útil para testes ou correções sem reescrever histórico

git replace --list

Mostrar todas as referências de substituição ativas

git replace -d <replace_ref>

Excluir uma referência de substituição específica para reverter comportamento

git stash Salvar temporariamente alterações não commitadas em uma pilha, permitindo troca de contexto sem commitar trabalho inacabado
git stash push -p

Selecionar interativamente trechos de alterações para stash, fornecendo controle granular sobre o que é salvo

git stash push -m "WIP selective stash"

Criar um stash com mensagem personalizada para identificação mais fácil

git stash apply stash@{2}

Aplicar um stash específico da lista de stashes, sem removê-lo

git rebase Reaplicar commits em cima de outra base, facilitando histórico limpo e linear e edição interativa
git rebase --interactive --autosquash

Iniciar uma sessão de rebase interativo que automaticamente reordena e squash commits marcados como fixup ou squash, simplificando limpeza de histórico

git rebase -i --autosquash HEAD~10

Reordenar e squashar commits marcados como fixup ou squash, limpando histórico antes de push

git commit --fixup <commit>

Criar um commit fixup que será automaticamente squashado durante rebase interativo

git commit --squash <commit>

Criar um commit squash para combinar com o commit especificado no rebase

git bisect Ferramenta de busca binária para identificar de forma eficiente o commit que introduziu um bug testando commits sucessivos e restringindo a mudança problemática
git bisect run

Automatizar o processo de bisect executando um script de teste em cada commit para identificar rapidamente o commit que introduziu um bug sem intervenção manual

git bisect start; git bisect bad; git bisect good v1.0; git bisect run ./test.sh

Automatizar a bisseção rodando um script de teste em cada commit, acelerando significativamente a identificação de bugs

git bisect visualize

Abrir uma ferramenta gráfica para visualizar o processo de bisseção

git bisect reset

Sair do modo bisect e retornar ao HEAD original

git commit Registrar mudanças no repositório com opções detalhadas de amend, assinatura, fixup e personalização de mensagens para manter histórico de alta qualidade
git commit --gpg-sign

Criar um commit assinado com sua chave GPG para garantir verificação criptográfica da autenticidade e autoria do commit

git commit -S -m "Signed commit"

Assinar criptograficamente seus commits com sua chave GPG, garantindo integridade e autoria

git config --global user.signingkey <key_id>

Configurar globalmente a chave GPG usada para assinar commits

git log --show-signature

Verificar e exibir informações de assinatura GPG para commits

git reflog Manter um log de atualizações de HEAD e branches, essencial para recuperar commits perdidos e entender movimentações locais de histórico
git reset --hard HEAD@{3}

Resetar o branch atual para um estado anterior do reflog para recuperar ou desfazer mudanças

git reflog expire --expire=now --all

Expirar imediatamente todas as entradas do reflog, limpando o histórico do reflog (use com cautela)

🧰 Dicas de Workflow Profissional e Automação

Tópico

Comandos / Exemplo

Explicação & Dicas Pro

Limpeza Agressiva do Repositório

git gc --aggressive --prune=now

Executa coleta de lixo profunda e poda objetos inalcançáveis imediatamente para otimizar o repositório. Use em janelas de manutenção

Worktrees Paralelos de Branch

git worktree add ../feature-branch feature

Manter múltiplos worktrees para desenvolvimento simultâneo de features, evitando overhead de clones

Histórico Limpo e Linear

git rebase -i --autosquash

Antes de enviar (push), use rebase interativo com autosquash para manter histórico limpo e legível

Commits Seguros

git commit -S

Assine commits com GPG para aumentar a confiabilidade em repositórios compartilhados; obrigatório em muitos ambientes corporativos

Bisseção Automatizada

git bisect run ./test-script.sh

Automatize a caça a bugs executando um script de teste em cada commit candidato durante o bisect

Cache de Resolução de Conflitos

git config --global rerere.enabled true

Ativar reuso de resoluções de conflitos para acelerar a resolução de conflitos repetidos em rebases ou merges

Aliases e Hooks Compartilhados

Armazene aliases comuns do Git e hooks de commit em um repositório compartilhado ou pipeline CI para impor padrões de equipe e melhorar produtividade

Recursos adicionais

🧠 Dica

Não tente memorizar tudo. Use --help, explore e pratique regularmente:

git help <command>
git status

🌐 Links úteis

📘 Documentação oficial do Git — manual detalhado de todos os comandos Git:
https://git-scm.com/docs

📙 Learn Git Branching — tutorial visual interativo para dominar conceitos de branching:
https://learngitbranching.js.org

📕 Livro Pro Git (gratuito, de Scott Chacon & Ben Straub):
https://git-scm.com/book

📗 Git Cheatsheet (referência oficial concisa):
https://education.github.com/git-cheat-sheet-education.pdf