Git Cheatsheet
204 comandos em 17 categorias, do básico ao avançado
Entenda antes de usar
Como usar esta página
- Digite o que você quer fazer na busca (ex.: "desfazer", "branch", "conflito") ou filtre por categoria.
- Clique em Copiar e cole no terminal.
- Troque o que estiver entre < > pelo seu valor: <branch> = nome da branch, <commit> = hash do commit (git log --oneline mostra), <url> = endereço do repositório.
- Comandos marcados como Cuidado podem apagar trabalho ou reescrever histórico que outras pessoas já baixaram.
- No PowerShell antigo (5.1), && não funciona: rode os comandos um por vez ou use ; no lugar.
As 4 áreas do Git
| Área | O que é | Como chegar |
|---|---|---|
| Pasta de trabalho | Seus arquivos como estão no disco | Editando os arquivos |
| Stage (índice) | O que vai entrar no próximo commit | git add |
| Repositório local | Histórico de commits na sua máquina | git commit |
| Remoto (origin) | Cópia no GitHub/GitLab/Bitbucket | git push / git pull |
Referências: HEAD, ~ e ^
| Notação | Significa |
|---|---|
| HEAD | Commit atual |
| HEAD~1 ou HEAD^ | Commit anterior |
| HEAD~3 | 3 commits atrás |
| HEAD^2 | Segundo pai de um commit de merge |
| origin/main | Última posição conhecida da main do remoto |
| main..feature | Commits da feature que não estão na main |
| HEAD@{2} | Onde o HEAD estava 2 movimentos atrás (reflog) |
reset x revert x restore
| Comando | Faz | Quando usar |
|---|---|---|
| git restore | Descarta mudanças em arquivos | Mudanças que ainda não foram commitadas |
| git reset | Move a branch para outro commit | Commits locais que ainda não foram enviados |
| git revert | Cria um commit que desfaz outro | Commits que já estão no remoto |
Padrão de mensagens (Conventional Commits)
| Prefixo | Uso | Exemplo |
|---|---|---|
| feat | Nova funcionalidade | feat: adiciona filtro por estado |
| fix | Correção de bug | fix: corrige cálculo do CEP |
| docs | Documentação | docs: atualiza README |
| style | Formatação, sem mudar lógica | style: aplica prettier |
| refactor | Refatoração | refactor: extrai função de placa |
| perf | Performance | perf: cria índice na busca |
| test | Testes | test: cobre validação de IE |
| chore | Tarefas gerais, dependências | chore: atualiza next |
| ci / build | Pipeline e build | ci: adiciona deploy automático |
Dicas de segurança
- Nunca reescreva (rebase, amend, reset + push --force) commits que outras pessoas já baixaram. Use revert.
- Se precisar forçar o push, use --force-with-lease em vez de --force.
- Apagou algo sem querer? Rode git reflog antes de entrar em pânico: quase tudo que foi commitado pode ser recuperado.
- Commitou senha ou .env? Troque a senha imediatamente. Remover do histórico (git filter-repo) não desfaz o vazamento.
- Antes de git clean -fd, rode git clean -n -d para ver o que será apagado.
- Mantenha um .gitignore com node_modules, .env, builds e arquivos do sistema desde o primeiro commit.
Configuração
git config --global user.name "Seu Nome"Nome gravado em todos os commits.
git config --global user.email "[email protected]"E-mail gravado nos commits (use o mesmo da sua conta GitHub/GitLab).
git config user.email "[email protected]"Sem --global, vale apenas para o repositório atual.
git config --list --show-originLista as configurações e de qual arquivo cada uma vem.
git config --global --editAbre o arquivo ~/.gitconfig no editor.
git config --global init.defaultBranch mainNovos repositórios começam com a branch main.
git config --global core.editor "code --wait"Usa o VS Code para mensagens de commit e rebase.
git config --global core.autocrlf trueConverte CRLF/LF automaticamente (use input no Linux/Mac).
git config --global pull.rebase truegit pull passa a fazer rebase em vez de merge.
git config --global credential.helper managerGuarda usuário/token no gerenciador de credenciais do sistema.
git config --global alias.lg "log --oneline --graph --all --decorate"Depois é só usar git lg.
git config --global push.autoSetupRemote trueO primeiro git push já configura o upstream.
git config --global rerere.enabled trueReaplica automaticamente conflitos que você já resolveu antes.
Criar e Clonar
git initCria um repositório Git na pasta atual.
git init meu-projetoCria a pasta e o repositório.
git init --bare projeto.gitRepositório sem pasta de trabalho, usado como remoto.
git clone <url>Copia o repositório remoto com todo o histórico.
git clone <url> <pasta>Define o nome da pasta de destino.
git clone -b <branch> <url>Já faz checkout da branch informada.
git clone --depth 1 <url>Clone raso: muito mais rápido, sem histórico antigo.
git clone --recurse-submodules <url>Baixa também os submódulos.
Stage e Commit
git statusMostra alterados, no stage e não rastreados.
git status -sbVersão curta, com a branch e se está à frente/atrás do remoto.
git add <arquivo>Coloca o arquivo no stage (preparado para o commit).
git add .Coloca todas as mudanças da pasta atual no stage.
git add -ANovos, alterados e removidos em todo o repositório.
git add -uIgnora arquivos novos.
git add -pEscolhe trecho por trecho o que vai para o commit.
git restore --staged <arquivo>Volta o arquivo para 'alterado', sem perder a mudança.
git commit -m "mensagem"Grava o que está no stage no histórico local.
git commit -m "feat: título curto" -m "Explicação detalhada"Cada -m vira um parágrafo.
git commit -am "mensagem"Faz add dos arquivos já rastreados e commita (não inclui novos).
git commit --amend -m "nova mensagem"Troca a mensagem e inclui o que estiver no stage. Não use em commit já enviado.
git add <arquivo> && git commit --amend --no-editMantém a mensagem original.
git commit --allow-empty -m "dispara pipeline"Útil para disparar CI/CD.
git rm <arquivo>Apaga o arquivo e registra a exclusão.
git rm --cached <arquivo>Tira do Git mas deixa o arquivo na pasta (ex.: .env commitado sem querer).
git rm -r --cached . && git add .Remove do índice arquivos que agora estão no .gitignore.
git mv <antigo> <novo>Renomeia mantendo o histórico.
git check-ignore -v <arquivo>Mostra qual regra do .gitignore está ignorando.
Branches
git branchA atual aparece com *.
git branch -aInclui as branches do remoto.
git branch -vvMostra o upstream e se está à frente/atrás.
git branch <nome>Cria sem mudar para ela.
git switch -c <nome>Forma moderna (equivale a git checkout -b).
git checkout -b <nome>Mesmo efeito do switch -c.
git switch <nome>Troca a branch atual.
git switch -Alterna entre as duas últimas branches.
git switch -c <nome> <commit>A nova branch começa naquele ponto.
git switch <nome-da-branch-remota>Cria a local já rastreando origin/<nome>.
git branch -m <novo-nome>Troca o nome da branch local.
git branch -d <nome>Só exclui se já foi mesclada.
git branch -D <nome>Exclui mesmo sem merge. Commits só nela podem se perder.
git push origin --delete <nome>Remove a branch do servidor.
git branch -u origin/<nome>Liga a branch local à remota para pull/push sem argumentos.
git branch --merged mainCandidatas a exclusão.
git branch --no-merged mainTêm commits que não estão na main.
git branch -m master main && git push -u origin mainDepois altere a branch padrão no GitHub/GitLab e exclua a master remota.
Merge e Rebase
git merge <branch>Traz os commits da branch para a atual.
git merge --no-ff <branch>Preserva no histórico que houve uma branch.
git merge --squash <branch> && git commit -m "feat: ..."Junta as mudanças da branch em um único commit.
git merge --abortVolta ao estado antes do merge.
git rebase mainReaplica seus commits em cima da main (histórico linear).
git fetch origin && git rebase origin/mainTraz as novidades da main para sua branch de trabalho.
git rebase -i HEAD~3Edita, junta (squash), reordena ou remove os últimos 3 commits.
git rebase --continueDepois de resolver o conflito e dar git add.
git rebase --skipDescarta o commit que está em conflito.
git rebase --abortVolta tudo como estava antes.
git rebase --onto main feature-antiga minha-branchTransplanta só os commits da minha-branch para cima da main.
git commit --fixup <commit> && git rebase -i --autosquash mainMarca correções e junta cada uma ao commit certo.
git cherry-pick <commit>Aplica um commit específico na branch atual.
git cherry-pick <commit-inicial>^..<commit-final>Aplica um intervalo de commits.
git cherry-pick -n <commit>Traz as mudanças para o stage para você revisar.
git cherry-pick --abortDesiste do cherry-pick em andamento.
git checkout --ours <arquivo>Mantém a versão da branch atual (no rebase os lados se invertem).
git checkout --theirs <arquivo>Mantém a versão da branch que está chegando.
git mergetoolAbre a ferramenta de merge configurada.
git diff --name-only --diff-filter=UMostra só os arquivos que ainda têm conflito.
Remoto
git remote -vLista os remotos e URLs.
git remote add origin <url>Liga o repositório local ao servidor.
git remote set-url origin <nova-url>Ex.: mudar de HTTPS para SSH.
git remote rename origin upstreamTroca o nome do remoto.
git remote remove <nome>Desliga o remoto (não apaga nada no servidor).
git remote show originBranches rastreadas e situação de cada uma.
git fetchAtualiza origin/* sem mexer nos seus arquivos.
git fetch --all --pruneRemove referências a branches apagadas no servidor.
git pullfetch + merge da branch rastreada.
git pull --rebasefetch + rebase: evita commits de merge desnecessários.
git pushEnvia a branch atual para o upstream.
git push -u origin <branch>Envia e define o upstream.
git push --force-with-leaseSobrescreve o remoto só se ninguém enviou nada novo. Prefira ao --force.
git push --forceSobrescreve o histórico remoto, podendo apagar commits de outras pessoas.
git remote add upstream <url-original>Para acompanhar o projeto de onde você fez o fork.
git fetch upstream && git rebase upstream/mainTraz as novidades do projeto original.
Histórico
git logCommits com autor, data e mensagem.
git log --onelineHash curto e mensagem.
git log --oneline --graph --all --decorateVisualiza branches e merges.
git log -n 5Limita a quantidade.
git log --statResumo de arquivos e linhas por commit.
git log -pMostra o diff de cada commit.
git log --author="Nome"Filtra por autor.
git log --since="2 weeks ago" --until="yesterday"Aceita datas e expressões em inglês.
git log --grep="login"Commits cuja mensagem contém o texto.
git log -S "nomeDaFuncao"Encontra o commit que adicionou ou removeu o trecho.
git log --follow -p -- <arquivo>Inclui renomeações do arquivo.
git log -L 10,30:<arquivo>Evolução das linhas 10 a 30.
git log main..featureO que a feature tem que a main ainda não tem.
git show <commit>Mensagem e diff do commit.
git show <commit>:<caminho/arquivo>Conteúdo do arquivo naquela versão.
git blame <arquivo>Autor e commit de cada linha.
git blame -L 10,30 <arquivo>Só as linhas informadas.
git shortlog -snQuantidade de commits de cada pessoa.
git describe --tagsEx.: v1.2.0-5-gabc123 (5 commits após a tag).
Diferenças
git diffDiferença entre a pasta e o stage.
git diff --stagedO que vai entrar no próximo commit.
git diff HEADStage e não adicionadas juntas.
git diff main..featureDiferença entre as pontas das branches.
git diff main...featureTrês pontos: só o que foi feito na feature.
git diff HEAD~1 HEADO que mudou no último commit.
git diff --name-only mainLista os arquivos diferentes.
git diff --statQuantidade de linhas por arquivo.
git diff <commit> -- <arquivo>Limita a um arquivo.
git diff --word-diffDestaca palavras alteradas, bom para textos.
Desfazer
git restore <arquivo>Volta o arquivo ao último commit. A mudança é perdida.
git restore .Volta todos os arquivos rastreados ao último commit.
git restore --source <commit> <arquivo>Traz a versão do arquivo daquele commit.
git reset --soft HEAD~1O commit some, as mudanças continuam prontas para commitar.
git reset HEAD~1Modo --mixed (padrão): mudanças voltam para 'alterado'.
git reset --hard HEAD~1Apaga o commit e as alterações.
git fetch origin && git reset --hard origin/mainDescarta tudo o que é local e fica igual ao servidor.
git revert <commit>Cria um commit novo que desfaz o anterior. Seguro para histórico compartilhado.
git revert -m 1 <commit-do-merge>Desfaz um merge mantendo o lado da branch principal.
git revert --no-commit <inicio>^..<fim> && git commitDesfaz um intervalo em um único commit.
git clean -n -dSimulação: não apaga nada.
git clean -fdRemove arquivos e pastas novos que não estão no Git.
git clean -fdxInclui node_modules, builds, .env...
Stash
git stashEsconde as mudanças e deixa a pasta limpa.
git stash push -m "tela de login"Facilita achar depois.
git stash -uInclui arquivos não rastreados.
git stash push <arquivo1> <arquivo2>Stash parcial.
git stash liststash@{0} é o mais recente.
git stash show -p stash@{0}Diff completo do stash.
git stash popAplica o mais recente e o apaga da lista.
git stash apply stash@{1}Aplica sem apagar.
git stash branch <nova-branch>Útil quando o pop dá conflito.
git stash drop stash@{0}Remove um item da lista.
git stash clearLimpa a lista inteira.
Tags e Versões
git tagMostra as tags do repositório.
git tag -l "v1.*"Tags que seguem o padrão.
git tag -a v1.0.0 -m "Versão 1.0.0"Recomendado para releases: guarda autor, data e mensagem.
git tag v1.0.0Tag leve, só um apontador.
git tag -a v0.9.0 <commit> -m "Versão 0.9.0"Marca um commit do passado.
git push origin v1.0.0Tags não sobem com git push comum.
git push --tagsEnvia todas as tags locais.
git show v1.0.0Dados da tag e do commit.
git switch --detach v1.0.0Checkout em modo detached para inspecionar.
git tag -d v1.0.0Remove a tag só na sua máquina.
git push origin --delete v1.0.0Remove a tag do servidor.
Recuperação
git reflogMostra resets, rebases e checkouts: a salvação para commits 'perdidos'.
git reset --hard HEAD@{1}Use o número mostrado no reflog.
git switch -c <branch> <hash-do-reflog>Cria a branch de novo a partir do commit encontrado no reflog.
git restore --source HEAD~1 <arquivo>Traz o arquivo de um commit anterior.
git fsck --lost-foundLista objetos sem referência (último recurso).
git bisect start && git bisect bad && git bisect good <commit-bom>Busca binária: o Git vai alternando commits para você testar.
git bisect good # ou: git bisect badInforme se o commit atual está bom ou ruim.
git bisect run npm testRoda o comando em cada passo e descobre sozinho.
git bisect resetVolta à branch original.
Busca e Inspeção
git grep -n "texto"Busca nos arquivos rastreados, com número da linha.
git grep "texto" <commit>Procura numa versão antiga.
git ls-filesTudo o que o Git controla.
git rev-parse HEADHash completo (use --short para curto).
git rev-parse --abbrev-ref HEADÚtil em scripts.
git rev-parse --show-toplevelCaminho da raiz.
git cat-file -p <hash>Inspeciona commits, árvores e blobs.
git count-objects -vHEspaço ocupado pelos objetos.
Submódulos e Worktree
git submodule add <url> <pasta>Inclui outro repositório dentro deste.
git submodule update --init --recursiveNecessário depois de clonar sem --recurse-submodules.
git submodule update --remote --mergeTraz o último commit de cada submódulo.
git submodule statusCommit de cada submódulo.
git submodule deinit -f <pasta> && git rm -f <pasta>Desregistra e apaga o submódulo.
git worktree add ../hotfix hotfixCria outra pasta com a branch hotfix, sem stash.
git worktree listPastas ligadas ao repositório.
git worktree remove ../hotfixApaga a pasta extra.
git sparse-checkout set src docsMantém no disco apenas as pastas informadas (repos grandes).
Patches e Arquivos
git format-patch -3Um arquivo .patch para cada um dos últimos 3 commits.
git am < arquivo.patchAplica mantendo autor e mensagem.
git apply arquivo.diffAplica as mudanças nos arquivos.
git archive --format=zip -o projeto.zip HEADExporta os arquivos rastreados, sem a pasta .git.
git bundle create repo.bundle --allTransporta o repositório offline (pendrive, e-mail).
git lfs install && git lfs track "*.psd"Guarda binários grandes fora do histórico normal.
git update-index --skip-worktree <arquivo>Ex.: arquivo de configuração local. Desfaça com --no-skip-worktree.
Manutenção
git gcCompacta objetos e remove lixo.
git maintenance startAgenda otimizações periódicas em segundo plano.
git remote prune originRemove origin/* de branches que não existem mais.
git branch --merged main | grep -v "main" | xargs git branch -dLimpeza em lote (Git Bash / Linux / Mac).
git filter-repo --path <arquivo> --invert-pathsEx.: senha commitada. Requer git-filter-repo e reescreve todo o histórico.
git config core.hooksPath .githooksVersiona hooks (pre-commit, commit-msg) junto com o código.
Fluxos do dia a dia
git switch main && git pull && git switch -c feature/nome-da-tarefaParte sempre da main atualizada.
git add . && git commit -m "feat: descrição" && git push -u origin feature/nome-da-tarefaDepois abra o PR no GitHub/GitLab.
git rebase -i mainTroque pick por squash nos commits que devem virar um só.
git switch main && git pull && git switch -c hotfix/descricaoCorrija, commite, faça PR e depois leve a correção para develop.
git reset --soft HEAD~1 && git stash && git switch <branch-certa> && git stash popMove o último commit (ainda não enviado) para outra branch.
git revert <commit> && git pushForma segura: não reescreve o histórico.
git init && git add . && git commit -m "primeiro commit" && git branch -M main && git remote add origin <url> && git push -u origin mainDo zero até o repositório no ar.