O Guia rápido de comandos Git é uma tabela pronta para usar: são 149 comandos divididos em onze cenários — configuração inicial, commits do dia a dia, branches, merge e rebase, desfazer e reverter, colaboração remota, stash, tags, submódulos e worktrees, histórico e solução de problemas, e ignore e atributos. Cada linha traz uma explicação curta, um exemplo que dá para colar no terminal e um rótulo de risco em dois níveis, “Aviso” e “Perigo” — comandos que descartam alterações não commitadas ou reescrevem histórico compartilhado saltam aos olhos.
O Guia rápido de comandos Git é uma tabela pronta para usar: são 149 comandos divididos em onze cenários — configuração inicial, commits do dia a dia, branches, merge e rebase, desfazer e reverter, colaboração remota, stash, tags, submódulos e worktrees, histórico e solução de problemas, e ignore e atributos. Cada linha traz uma explicação curta, um exemplo que dá para colar no terminal e um rótulo de risco em dois níveis, “Aviso” e “Perigo” — comandos que descartam alterações não commitadas ou reescrevem histórico compartilhado saltam aos olhos.
Ele serve para três momentos: você lembra o que quer fazer, mas esqueceu como se escreve o comando (busque “desfazer commit”, “excluir branch remota”); você conhece o comando, mas não tem certeza se ele vai apagar algo (leia o nível de risco e as observações); e você está começando no Git e quer entender o que add, commit e push movem de um lugar para o outro (veja o diagrama das quatro áreas no topo e os diagramas de operação mais abaixo).
No fim da página há um terminal Git simulado que roda só na memória: são mais de 30 subcomandos comuns, com o grafo de commits à direita mudando em tempo real a cada comando, além de 10 níveis de prática, do “primeiro commit” até “resolver um conflito de merge”. Ele não é o Git de verdade e nunca acessa o seu computador nem a rede, mas a semântica segue o manual oficial, então o treino vale para a máquina real.
Como usar
01Buscardigite o nome do comando ou o que você quer fazer (como “desfazer”, “force push”, “excluir branch”) no campo do topo. Vários termos separados por espaço precisam aparecer todos; os resultados ficam na ordem dos grupos originais.
02Navegar por cenárioclique nos chips de grupo para ver só uma categoria, ou use o índice de grupos abaixo das “quatro áreas” para pular direto ao trecho; marque “só comandos de risco” para conferir tudo antes de executar.
03Copiarclique no comando em azul ou no ícone de copiar à direita para copiar o comando; o segundo ícone copia o exemplo, e em “Combinações comuns” dá para copiar uma receita inteira.
04Favoritosclique na estrela para fixar um comando em “Meus favoritos”, no topo da página; os favoritos ficam no navegador deste computador (localStorage) e não sincronizam entre aparelhos.
05Praticarrole até o “Terminal de prática”, escolha um nível e digite os comandos conforme o objetivo; cada comando é avaliado automaticamente e, se você travar, use “Dica”, “Resposta” ou “Reiniciar” para voltar ao estado inicial do nível.
Exemplos de entrada e saída
Digite “desfazer commit” na caixa de busca e aparecem estas linhas do grupo “Desfazer e reverter” (trecho):
Concluindo o nível 4, “desfazer o último commit mantendo as alterações”, no terminal simulado:
text
git reset --soft HEAD~1 desfaz o último commit e mantém as alterações na área de staging Aviso
git reset HEAD~1 desfaz o último commit e devolve as alterações para a árvore de trabalho, sem staging
git reset --hard <commit> ponteiro da branch, índice e árvore de trabalho voltam ao commit Perigo
git revert <commit> cria um novo commit que desfaz a alteração; o histórico não muda e o push é seguro
bash
user@toolun-lab:~/project (main)$ git log --oneline
7f3a1c2 (HEAD -> main) wip: commit bagunçado
2b9e0d4 init: add README
user@toolun-lab:~/project (main)$ git reset --soft HEAD~1
HEAD agora está em 2b9e0d4 init: add README
--soft: move só o ponteiro da branch; índice e árvore de trabalho são mantidos (o conteúdo do commit desfeito fica em staging)
Dica: o commit descartado 7f3a1c2 ainda pode ser recuperado com git reflog
user@toolun-lab:~/project (main)$ git status -s
A app.js
A secret.env
✔ Concluído: desfazer o último commit, mantendo as alterações.
Como funciona
As quatro áreas: os comandos só movem dados
Quase todo comando Git pode ser lido como “mover conteúdo de uma área para outra”. A árvore de trabalho são os arquivos que você vê e edita; o índice (staging area) é a lista do que o próximo commit vai conter; o repositório local (.git) guarda todos os commits; o repositório remoto é o mesmo conjunto em outra máquina.
add coloca em staging, commit guarda, push publica; o caminho inverso é fetch e restore
Com esse desenho em mente, muitas dúvidas de “como desfazer” têm uma resposta única: mudou algo que ainda não passou por add — recupere com git restore <file>; fez add e não quer commitar — git restore --staged; commitou e quer voltar — git reset; já fez push — só git revert, que acrescenta um commit inverso, é seguro.
Commit é snapshot, branch é só um ponteiro
Um objeto de commit registra: o snapshot de toda a árvore de diretórios (não um diff), o id dos commits-pai, autor e data, e a mensagem. Isso tudo é resumido por SHA-1 (repositórios novos podem usar SHA-256) até chegar ao id do commit, então qualquer mudança — mesmo um caractere na mensagem — gera um id totalmente novo. É por isso que --amend, rebase e cherry-pick “reescrevem o histórico”: eles criam commits novos, e os antigos simplesmente deixam de ser referenciados.
Uma branch é um arquivo de 40 caracteres em .git/refs/heads/<name> cujo conteúdo é o id de um commit. O HEAD normalmente aponta para um nome de branch. Por isso criar branch é instantâneo (escrever um arquivo pequeno), trocar de branch é reapontar o HEAD para outro nome e atualizar a árvore de trabalho para o snapshot daquele commit, e excluir branch é apagar um ponteiro — os commits em si não somem na hora.
merge ou rebase: como escolher
O mesmo ponto de partida, os dois históricos que merge e rebase produzem
O merge registra fielmente o que aconteceu: as duas linhas se encontram no commit de merge e qualquer pessoa vê que a funcionalidade foi desenvolvida em paralelo. O rebase deixa o histórico parecendo sempre linear — git log fica mais fácil de ler e git bisect mais fácil de usar — ao custo de mudar todos os ids de commit. Regra prática: rebase à vontade na sua branch que ainda não foi enviada; só faça merge do que outras pessoas podem estar usando como base. O git pull --rebase é essa regra no dia a dia: ele move seus poucos commits não enviados para depois do estado mais recente do remoto e evita uma pilha de “Merge branch 'main' of …”.
Os três modos do reset
Qual área cada modo puxa de volta para o commit de destino
O --soft serve para “dividir ou juntar commits”: o ponteiro volta e o conteúdo continua em staging. O --mixed (padrão) serve para “escolher de novo o que commitar”. O --hard é o descarte de verdade: alterações que nunca foram commitadas na árvore de trabalho não têm como voltar, mas os commits descartados continuam no banco de objetos — o git reflog mostra cada movimento do HEAD, e git reset --hard HEAD@{1} leva você de volta ao estado anterior ao reset. Por padrão o reflog guarda 90 dias (30 para entradas inalcançáveis): é a janela de arrependimento que o Git oferece.
Como os níveis de risco são definidos
O rótulo “Perigo” vai para dois tipos de comando: os que descartam conteúdo não commitado da árvore de trabalho (restore, reset --hard, clean, stash drop, checkout -- <file>) e os que reescrevem histórico que outras pessoas talvez já tenham (push --force, branch -D em branch não mesclada). “Aviso” fica para comandos que mudam o estado de forma recuperável ou cujo raio de impacto você deve confirmar antes (commit --amend, rebase, merge --squash, push --delete). Comandos somente leitura (log, diff, status, show, blame) não recebem rótulo.
Escopo e limitações
Origem dos comandos
baseado nos manuais oficiais (git-scm.com/docs, Git 2.4x); git switch e git restore exigem a versão 2.23 ou mais nova, e a grafia antiga checkout aparece junto.
Critério de inclusão
comandos e opções usados no dia a dia de desenvolvimento, colaboração e depuração; cada entrada tem correspondência numa página de manual. Comandos plumbing (hash-object, cat-file, update-ref e afins) e operações específicas de plataforma (PR no GitHub, MR no GitLab pelo site) ficam de fora.
Terminal simulado
implementa a semântica central dos subcomandos comuns (fast-forward e merge de três vias, detecção de conflito por arquivo, os três modos de reset, rebase linear, stash, push e pull remotos), mas não cobre rebase interativo, bisect, submódulos, hooks nem todas as opções de arquivos de configuração; um rebase que encontra conflito é abandonado automaticamente em vez de parar para você resolver.
O que não faz
não conecta a repositório real, não lê o .git do seu computador e não oferece resolvedor gráfico de conflitos.
Favoritos e recentes
ficam só no navegador deste aparelho; limpar os dados do site apaga tudo.
Casos de uso típicos
Commitou cedo, escreveu errado, foi para a branch errada
Busque “desfazer” ou abra o grupo “Desfazer e reverter” e separe primeiro os casos “ainda não enviei” (reset / --amend) dos “já enviei” (revert), depois escolha o comando. Em “Combinações comuns” há receitas completas, como “commitei na main e quero levar para uma branch nova”.
Deixar o histórico limpo antes do merge
git rebase -i HEAD~N com squash / fixup / reword; o cartão de rebase nos diagramas mostra como o histórico sai da bifurcação para uma linha reta e por que os commits antigos ficam cinza.
Primeira colaboração: remoto, tracking e push recusado
O grupo “Colaboração remota” vai de remote add a push -u e --force-with-lease; os níveis 8 (push) e 9 (desfazer um commit já enviado) do terminal cobrem os dois “não consigo dar push” mais comuns.
Recuperar o que “sumiu”
git reflog, git fsck --lost-found e git stash list ficam lado a lado em “Desfazer e reverter”; a receita “recuperar uma branch apagada por engano” resolve em dois passos.
Perguntas frequentes
git reset ou git revert: qual escolher?
Depende de o commit já ter sido enviado. Não enviado: reset puxa o ponteiro direto de volta e o histórico fica limpo. Já enviado: revert acrescenta um commit inverso sem reescrever o que os outros já baixaram; caso contrário, na próxima vez que alguém fizer pull vai dar bifurcação.
Por que aparecem commits “Merge branch 'main' of …” depois do git pull?
Porque você tem commits não enviados e o remoto também tem commits novos, e o pull padrão faz merge dos dois lados. Para evitar, use git pull --rebase ou configure de uma vez com git config --global pull.rebase true.
Qual é a diferença entre --force e --force-with-lease?
--force sobrescreve a branch remota sem condição. O --force-with-lease primeiro confere se a branch remota ainda é o commit que você viu no último fetch e recusa se alguém tiver enviado algo novo — é o que impede o acidente de “sobrescrevi os commits do colega”. Depois de reescrever histórico, use sempre o segundo.
Por que os ids de commit do terminal simulado são sempre iguais?
O Git real resume conteúdo, autor e data/hora num hash; o simulador troca o tempo real por um relógio lógico e usa hash determinístico, então a mesma sequência de operações gera os mesmos ids, o que facilita comparar com a resposta de referência. Os ids dele são diferentes dos que o Git real calcularia, de propósito.
Os comandos do guia funcionam no Windows?
Os comandos em si são multiplataforma. A diferença está no shell: no PowerShell, && exige a versão 7.x, colocar caminhos entre aspas é mais seguro e as quebras de linha convém configurar pelo item core.autocrlf em “Configuração inicial”.
Privacidade
Todo o conteúdo da página (a tabela de comandos, os diagramas e o terminal simulado) é estático, baixado junto com a página e executado localmente no seu navegador; buscar, copiar, favoritar e praticar não enviam requisição nenhuma ao servidor. Os favoritos ficam no localStorage deste aparelho, fora do alcance do site. Os links externos apontam para a documentação oficial do Git e são tratados pelo site de destino depois do clique.
Referências e leitura adicional
Git Reference Manual(consultado em 2026-09-09)— a página de manual de referência de cada comando; todas as entradas desta página foram conferidas por ela.
Pro Git, 2ª edição (em inglês)(consultado em 2026-09-09)— o capítulo 3, “Branches”, e a seção 7.7, “Reset desvendado”, são a melhor introdução a ponteiros e às três áreas.
Página de manual do git-reset(consultado em 2026-09-09)— a tabela oficial de como os três modos afetam HEAD, índice e árvore de trabalho.
Página de manual do git-rebase(consultado em 2026-09-09)— a seção “Recovering from upstream rebase” explica por que não se faz rebase em branch compartilhada.
149 comandos Git agrupados por situação, cada um com explicação, exemplo e nível de risco; busca, cópia em um clique e favoritos; inclui diagramas e um terminal de prática
Esta ferramenta ainda não está totalmente traduzida; parte do conteúdo usa o idioma de origem ou um idioma de reserva.
Total 149 comandos
Os dados fluem entre as quatro áreas: add para a área de preparação, commit para o repositório local, push para o remoto; no sentido inverso, com fetch / restore / switch. pull = fetch + merge.
Inicialização e configuração
14 entradas· Novos repositórios, clones, identidades e configurações comuns
Transforme o diretório atual em um repositório Git (gere .git/)
git init
git init -b main # Especifique o nome inicial do branch
Clone o repositório remoto localmente e configure automaticamente a origem
Ao rebase, os significados do nosso/deles são invertidos: o nosso é o ramo que é rebaseado.
"Mova" os commits do branch atual para a base e depois reproduza-os para obter o histórico em linha retaAtenção
git switch feature
git rebase main
Todos os IDs de commit movidos serão alterados; ramos que foram empurrados e alguém está trabalhando nisso não devem ser rebaseados.
Rebase interativo: mesclar/reescrever/reorganizar/excluir commits após commitAtenção
git rebase -i HEAD~3
# escolha manter reformulação alterar a descrição squash mesclar para a anterior correção mesclar e perder a descrição soltar excluir
Rebase encontra um conflito: resolva e continue após adicionar
git add .
git rebase --continue
Desista desse rebase e volte para onde você começou
git rebase --abort
Migrar os commits de old-base..branch para new-base
git rebase --onto main server client
Adequado para a situação em que “a agência foi aberta no local errado”.
Faça um commit de correção primeiro e mescle-o automaticamente no commit de destino ao fazer o rebase
git commit --fixup a1b2c3d
git rebase -i --autosquash a1b2c3d~1
Copie as alterações de um determinado commit para o branch atual (novo id)
Desfaça o commit mais recente e retorne as alterações para o espaço de trabalho sem serem preparadas (padrão --mixed)
git reset HEAD~1
O ponteiro de branch, a área de armazenamento temporário e a área de trabalho são retornados para confirmação e as alterações não confirmadas são descartadas.Perigo
git reset --hard HEAD~1 # Jogue fora o último commit
git reset --hard origin/main # Exatamente o mesmo que remoto
As alterações no espaço de trabalho são irreversíveis; os confirmados podem ser recuperados usando git reflog.
Mova um arquivo para fora da área de teste (mantenha a área de trabalho), equivalente a restaurar --staged
git reset package-lock.json
Gere um novo commit para compensar as alterações do commit, o histórico permanece inalterado e pode ser enviado com segurança
git revert HEAD
git revert a1b2c3d --no-edit
Desfaça uma seção de envios em lotes e envie-os juntos no final
git bisect start
git bisect bad # Atualmente ruim
git bisect good v1.1.0 # Esta versão é boa
# Teste repetidamente e execute git bisect good/bad
git bisect reset
Deixe o script determinar automaticamente se é bom ou ruim e divida-o automaticamente em duas partes.
git bisect run npm test
Pesquise nos arquivos rastreados (mais rápido que grep -r e não pesquisa node_modules)
git grep -n "TODO" -- "*.ts"
git grep "foo" v1.0 # Pesquise em uma determinada versão
Visualize diretamente o conteúdo de uma determinada versão de um arquivo sem cortar branches
git show HEAD~5:src/config.js > old-config.js
Listar apenas nomes de arquivos alterados
git diff --name-only HEAD~3 HEAD
git diff --name-status main # com status M/A/D
Visualize o número e o espaço ocupado dos objetos do armazém
git count-objects -vH
Empacote objetos, limpe o lixo, reduza .gitAtenção
git gc --aggressive --prune=now
prune irá, na verdade, excluir os objetos inacessíveis, e o remédio para arrependimento no reflog desaparecerá junto.
Analise a referência no ID de commit completo; --abbrev-ref obtém o nome do branch
git rev-parse --short HEAD
git rev-parse --abbrev-ref HEAD
git rev-parse --show-toplevel # Diretório raiz do armazém
Exporte uma determinada versão do arquivo para um pacote compactado (excluindo .git)
git archive -o release.zip v1.2.0
git archive HEAD src/ | tar -x -C /tmp/out
Ignorar e atributos
7 entradas· .gitignore / .gitattributes / arquivos grandes
Um padrão por linha: node_modules/, *.log, !keep.log (negado), /build (somente diretório raiz)
Encadeie alguns comandos em uma receita de «quero fazer uma coisa»; ao expandir, dá para copiar tudo.
Desfaça o commit mais recente, mas mantenha as alterações
O envio foi muito cedo/a descrição foi escrita incorretamente/quero dividi-lo em dois envios (e ainda não foi enviado)
git reset --soft HEAD~1Envie e retire, as alterações ainda estão na área de teste
git statusConfirme se os arquivos estão todos em “Alterações a serem enviadas”
git commit -m “nova descrição”
Desfazer um commit já enviado
Outros podem já ter feito isso, a história não pode ser reescrita.
git revert <commit>Gerar commit reverso
git push
Reverter para uma versão (local)Perigo
O experimento local está bagunçado e quero voltar completamente para um determinado commit
git log --onelineEncontre o ID do commit alvo
git stash -u(Opcional) Recolha as alterações que deseja manter primeiro
git reset --hard <commit>
Enviado em main e deseja mudar para uma nova branchAtenção
Esqueci de abrir uma branch e enviei N vezes.
git branch feature/xCrie uma branch no local atual ("salve" esses commits)
git reset --hard origin/mainprincipal retorna ao estado remoto
git switch feature/x
Combine vários envios fragmentários em umAtenção
Organize o histórico antes de abrir um PR (a agência não é utilizada por terceiros)
git rebase -i HEAD~4Altere o pick nas linhas a seguir para squash ou fixup
git push --force-with-leaseObrigatório somente se o branch tiver sido enviado por push
Deixe o ramo de função acompanhar o progresso mais recente do main
main tem um novo commit, e o branch feature deve continuar em cima dele
git fetch origin
git switch feature/x
git rebase origin/mainou git merge Origin/main (manter commits de mesclagem)
Renomeie master para main (incluindo remoto)Atenção
Unifique o nome da branch padrão
git branch -m master main
git push -u origin main
git push origin --delete masterPrimeiro, corte o branch padrão para main na plataforma de hospedagem
Recuperar branches excluídas acidentalmente
Achei útil depois de git branch -D
git reflogEncontre o id do último commit do branch (como "commit: xxx")
git branch <name> <commit-id>
Arquivo chave/grande enviado por enganoPerigo
.env ou centenas de arquivos MB entraram no histórico
git rm --cached .env && echo ".env" >> .gitignoreSe apenas o commit mais recente for feito: então git commit --amend
git filter-repo --path .env --invert-pathsJá mergulhado na história: reescreva todo o histórico com git-filter-repo (precisa ser instalado separadamente)
git push --force-with-lease --allTodos os colaboradores deverão ser clonados novamente; chaves vazadas devem ser invalidadas e reemitidas de qualquer maneira
Traga uma correção para o branch de lançamento
Bugs corrigidos no main também serão movidos para release/1.2
git switch release/1.2
git cherry-pick <commit>
git push
Mesclar processo de tratamento padrão de conflitos
git mesclar / puxar relatório CONFLITO
git statusVeja quais documentos foram “modificados por ambas as partes”
code <file>Processar tags <<<<<<< ======= >>>>>>> no editor, mantendo o conteúdo correto
git add <file>Adicione um depois que cada um for corrigido
git commitAo rebase, git rebase --continue
Existe um projeto localmente, envie-o para o novo armazém remoto vazio
Primeiro escrevi o código localmente e depois construí um warehouse no GitHub.
git init -b main && git add -A && git commit -m "init"
Diagrama: o que cada comando faz com o grafo de commits
Os círculos são commits e as setas apontam para o commit pai; os rótulos verdes são branches e o roxo indica o branch onde está o HEAD; os círculos cinza não são mais referenciados por nenhum branch (recuperáveis pelo reflog) e os preenchidos são os commits criados por esta operação.
Commit: adicionar um nó na ponta do branch atual
git add . && git commit -m "…"
Cada commit registra seu próprio commit pai; um branch é apenas um ponteiro móvel para um commit, então ao confirmar, main e HEAD avançam juntos.
Criar um branch: apenas um ponteiro, sem copiar arquivos
git switch -c feature
O novo branch e main apontam para o mesmo commit, então criá-lo é instantâneo; depois, commits em feature avançam apenas feature.
Merge fast-forward: mover o ponteiro quando main não tem commits próprios
git switch main && git merge feature
Nenhum commit novo é criado e o histórico continua uma linha reta. Para guardar o registro de que houve um branch aqui, use --no-ff.
Merge de três vias: quando os dois lados têm commits novos, surge um commit de merge
git merge feature
O Git encontra o ancestral comum b2, combina as mudanças de cada lado em relação a b2 e cria m6 com dois commits pais. Só há conflito quando a mesma área muda de forma diferente.
Rebase: reaplicar os commits de feature sobre main
git switch feature && git rebase main
O histórico vira uma linha reta, mas c3 e d4 são substituídos pelos novos commits c3′ e d4′ (os ids mudam). Evite fazer rebase de um branch já enviado, senão o histórico dos outros vai divergir do seu.
reset: recuar o ponteiro do branch (os commits ficam órfãos por enquanto)
git reset --hard HEAD~1
--soft move apenas o ponteiro; --mixed também limpa a área de preparação; --hard reverte também a árvore de trabalho. O commit órfão c3 ainda pode ser recuperado pelo reflog (mantido por pelo menos 30 dias por padrão).
revert: cancelar com um commit inverso, sem reescrever o histórico
git revert HEAD
c3 continua no histórico e o novo commit r4 contém o inverso das mudanças de c3. Para desfazer um commit já enviado, use revert em vez de reset.
cherry-pick: trazer apenas um commit
git cherry-pick x7
Reaplica sobre main a mudança que x7 introduziu em relação ao seu commit pai e gera x7′ com o mesmo conteúdo e id diferente. É a forma usual de levar uma correção isolada para um branch de release.
Terminal de prática: digitar os comandos no navegador
Um simulador de Git totalmente em memória (não é o Git real e não acessa a rede): aceita os subcomandos comuns init / add / commit / branch / switch / merge / rebase / reset / revert / stash / tag / remote / push / pull, e o grafo à direita é atualizado em tempo real. 10 níveis vão de “a primeira confirmação” a “resolver um conflito de fusão”. A prática de comandos Linux está emReferência de comandos do Linux.
git-lab — bashTab para completar · ↑↓ histórico · Ctrl+L para limpar
Terminal de prática do Git do Toolun: um Git em memória para experimentar à vontade sem quebrar nada.
Digite git help para ver os subcomandos compatíveis; escolha uma lição à direita e siga o objetivo: o grafo de commits é atualizado a cada comando.