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
ÁreaO que éComo chegar
Pasta de trabalhoSeus arquivos como estão no discoEditando os arquivos
Stage (índice)O que vai entrar no próximo commitgit add
Repositório localHistórico de commits na sua máquinagit commit
Remoto (origin)Cópia no GitHub/GitLab/Bitbucketgit push / git pull
Referências: HEAD, ~ e ^
NotaçãoSignifica
HEADCommit atual
HEAD~1 ou HEAD^Commit anterior
HEAD~33 commits atrás
HEAD^2Segundo pai de um commit de merge
origin/mainÚltima posição conhecida da main do remoto
main..featureCommits 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
ComandoFazQuando usar
git restoreDescarta mudanças em arquivosMudanças que ainda não foram commitadas
git resetMove a branch para outro commitCommits locais que ainda não foram enviados
git revertCria um commit que desfaz outroCommits que já estão no remoto
Padrão de mensagens (Conventional Commits)
PrefixoUsoExemplo
featNova funcionalidadefeat: adiciona filtro por estado
fixCorreção de bugfix: corrige cálculo do CEP
docsDocumentaçãodocs: atualiza README
styleFormatação, sem mudar lógicastyle: aplica prettier
refactorRefatoraçãorefactor: extrai função de placa
perfPerformanceperf: cria índice na busca
testTestestest: cobre validação de IE
choreTarefas gerais, dependênciaschore: atualiza next
ci / buildPipeline e buildci: 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

Eu quero...Definir seu nome
git config --global user.name "Seu Nome"

Nome gravado em todos os commits.

Eu quero...Definir seu e-mail
git config --global user.email "[email protected]"

E-mail gravado nos commits (use o mesmo da sua conta GitHub/GitLab).

Eu quero...Configurar só neste repositório
git config user.email "[email protected]"

Sem --global, vale apenas para o repositório atual.

Eu quero...Ver todas as configurações
git config --list --show-origin

Lista as configurações e de qual arquivo cada uma vem.

Eu quero...Editar configuração global
git config --global --edit

Abre o arquivo ~/.gitconfig no editor.

Eu quero...Branch padrão main
git config --global init.defaultBranch main

Novos repositórios começam com a branch main.

Eu quero...Definir editor padrão
git config --global core.editor "code --wait"

Usa o VS Code para mensagens de commit e rebase.

Eu quero...Quebra de linha no Windows
git config --global core.autocrlf true

Converte CRLF/LF automaticamente (use input no Linux/Mac).

Eu quero...Pull com rebase por padrão
git config --global pull.rebase true

git pull passa a fazer rebase em vez de merge.

Eu quero...Salvar credenciais
git config --global credential.helper manager

Guarda usuário/token no gerenciador de credenciais do sistema.

Eu quero...Criar atalho (alias)
git config --global alias.lg "log --oneline --graph --all --decorate"

Depois é só usar git lg.

Eu quero...Push cria a branch remota
git config --global push.autoSetupRemote true

O primeiro git push já configura o upstream.

Eu quero...Lembrar resolução de conflitos
git config --global rerere.enabled true

Reaplica automaticamente conflitos que você já resolveu antes.

Criar e Clonar

Eu quero...Iniciar repositório
git init

Cria um repositório Git na pasta atual.

Eu quero...Iniciar em uma pasta nova
git init meu-projeto

Cria a pasta e o repositório.

Eu quero...Repositório servidor (bare)
git init --bare projeto.git

Repositório sem pasta de trabalho, usado como remoto.

Eu quero...Clonar repositório
git clone <url>

Copia o repositório remoto com todo o histórico.

Eu quero...Clonar em outra pasta
git clone <url> <pasta>

Define o nome da pasta de destino.

Eu quero...Clonar uma branch específica
git clone -b <branch> <url>

Já faz checkout da branch informada.

Eu quero...Clonar só o último commit
git clone --depth 1 <url>

Clone raso: muito mais rápido, sem histórico antigo.

Eu quero...Clonar com submódulos
git clone --recurse-submodules <url>

Baixa também os submódulos.

Stage e Commit

Eu quero...Ver situação dos arquivos
git status

Mostra alterados, no stage e não rastreados.

Eu quero...Situação resumida
git status -sb

Versão curta, com a branch e se está à frente/atrás do remoto.

Eu quero...Adicionar um arquivo
git add <arquivo>

Coloca o arquivo no stage (preparado para o commit).

Eu quero...Adicionar tudo
git add .

Coloca todas as mudanças da pasta atual no stage.

Eu quero...Adicionar tudo (inclusive exclusões)
git add -A

Novos, alterados e removidos em todo o repositório.

Eu quero...Adicionar só arquivos já rastreados
git add -u

Ignora arquivos novos.

Eu quero...Adicionar partes do arquivo
git add -p

Escolhe trecho por trecho o que vai para o commit.

Eu quero...Tirar do stage
git restore --staged <arquivo>

Volta o arquivo para 'alterado', sem perder a mudança.

Eu quero...Fazer commit
git commit -m "mensagem"

Grava o que está no stage no histórico local.

Eu quero...Commit com título e descrição
git commit -m "feat: título curto" -m "Explicação detalhada"

Cada -m vira um parágrafo.

Eu quero...Adicionar e commitar rastreados
git commit -am "mensagem"

Faz add dos arquivos já rastreados e commita (não inclui novos).

Eu quero...Corrigir o último commit Cuidado
git commit --amend -m "nova mensagem"

Troca a mensagem e inclui o que estiver no stage. Não use em commit já enviado.

Eu quero...Incluir arquivo esquecido no último commit
git add <arquivo> && git commit --amend --no-edit

Mantém a mensagem original.

Eu quero...Commit vazio
git commit --allow-empty -m "dispara pipeline"

Útil para disparar CI/CD.

Eu quero...Remover arquivo
git rm <arquivo>

Apaga o arquivo e registra a exclusão.

Eu quero...Parar de rastrear (manter no disco)
git rm --cached <arquivo>

Tira do Git mas deixa o arquivo na pasta (ex.: .env commitado sem querer).

Eu quero...Aplicar novo .gitignore
git rm -r --cached . && git add .

Remove do índice arquivos que agora estão no .gitignore.

Eu quero...Renomear/mover arquivo
git mv <antigo> <novo>

Renomeia mantendo o histórico.

Eu quero...Ver por que um arquivo é ignorado
git check-ignore -v <arquivo>

Mostra qual regra do .gitignore está ignorando.

Branches

Eu quero...Listar branches locais
git branch

A atual aparece com *.

Eu quero...Listar todas (locais e remotas)
git branch -a

Inclui as branches do remoto.

Eu quero...Branches com último commit
git branch -vv

Mostra o upstream e se está à frente/atrás.

Eu quero...Criar branch
git branch <nome>

Cria sem mudar para ela.

Eu quero...Criar e mudar para a branch
git switch -c <nome>

Forma moderna (equivale a git checkout -b).

Eu quero...Criar e mudar (forma antiga)
git checkout -b <nome>

Mesmo efeito do switch -c.

Eu quero...Mudar de branch
git switch <nome>

Troca a branch atual.

Eu quero...Voltar para a branch anterior
git switch -

Alterna entre as duas últimas branches.

Eu quero...Criar branch a partir de um commit
git switch -c <nome> <commit>

A nova branch começa naquele ponto.

Eu quero...Baixar branch remota
git switch <nome-da-branch-remota>

Cria a local já rastreando origin/<nome>.

Eu quero...Renomear branch atual
git branch -m <novo-nome>

Troca o nome da branch local.

Eu quero...Excluir branch local
git branch -d <nome>

Só exclui se já foi mesclada.

Eu quero...Forçar exclusão da branch local Cuidado
git branch -D <nome>

Exclui mesmo sem merge. Commits só nela podem se perder.

Eu quero...Excluir branch remota Cuidado
git push origin --delete <nome>

Remove a branch do servidor.

Eu quero...Definir upstream
git branch -u origin/<nome>

Liga a branch local à remota para pull/push sem argumentos.

Eu quero...Branches já mescladas
git branch --merged main

Candidatas a exclusão.

Eu quero...Branches ainda não mescladas
git branch --no-merged main

Têm commits que não estão na main.

Eu quero...Renomear master para main
git branch -m master main && git push -u origin main

Depois altere a branch padrão no GitHub/GitLab e exclua a master remota.

Merge e Rebase

Eu quero...Mesclar branch
git merge <branch>

Traz os commits da branch para a atual.

Eu quero...Mesclar sempre com commit de merge
git merge --no-ff <branch>

Preserva no histórico que houve uma branch.

Eu quero...Mesclar tudo em um commit (squash)
git merge --squash <branch> && git commit -m "feat: ..."

Junta as mudanças da branch em um único commit.

Eu quero...Cancelar merge com conflito
git merge --abort

Volta ao estado antes do merge.

Eu quero...Rebase na main Cuidado
git rebase main

Reaplica seus commits em cima da main (histórico linear).

Eu quero...Atualizar branch com a main remota
git fetch origin && git rebase origin/main

Traz as novidades da main para sua branch de trabalho.

Eu quero...Rebase interativo Cuidado
git rebase -i HEAD~3

Edita, junta (squash), reordena ou remove os últimos 3 commits.

Eu quero...Continuar rebase
git rebase --continue

Depois de resolver o conflito e dar git add.

Eu quero...Pular commit no rebase
git rebase --skip

Descarta o commit que está em conflito.

Eu quero...Cancelar rebase
git rebase --abort

Volta tudo como estava antes.

Eu quero...Mover branch para outra base Cuidado
git rebase --onto main feature-antiga minha-branch

Transplanta só os commits da minha-branch para cima da main.

Eu quero...Squash automático de fixups
git commit --fixup <commit> && git rebase -i --autosquash main

Marca correções e junta cada uma ao commit certo.

Eu quero...Copiar um commit (cherry-pick)
git cherry-pick <commit>

Aplica um commit específico na branch atual.

Eu quero...Cherry-pick de vários commits
git cherry-pick <commit-inicial>^..<commit-final>

Aplica um intervalo de commits.

Eu quero...Cherry-pick sem commitar
git cherry-pick -n <commit>

Traz as mudanças para o stage para você revisar.

Eu quero...Cancelar cherry-pick
git cherry-pick --abort

Desiste do cherry-pick em andamento.

Eu quero...Conflito: ficar com a minha versão
git checkout --ours <arquivo>

Mantém a versão da branch atual (no rebase os lados se invertem).

Eu quero...Conflito: ficar com a versão deles
git checkout --theirs <arquivo>

Mantém a versão da branch que está chegando.

Eu quero...Ferramenta visual de conflito
git mergetool

Abre a ferramenta de merge configurada.

Eu quero...Listar arquivos em conflito
git diff --name-only --diff-filter=U

Mostra só os arquivos que ainda têm conflito.

Remoto

Eu quero...Ver remotos
git remote -v

Lista os remotos e URLs.

Eu quero...Adicionar remoto
git remote add origin <url>

Liga o repositório local ao servidor.

Eu quero...Trocar URL do remoto
git remote set-url origin <nova-url>

Ex.: mudar de HTTPS para SSH.

Eu quero...Renomear remoto
git remote rename origin upstream

Troca o nome do remoto.

Eu quero...Remover remoto
git remote remove <nome>

Desliga o remoto (não apaga nada no servidor).

Eu quero...Detalhes do remoto
git remote show origin

Branches rastreadas e situação de cada uma.

Eu quero...Baixar novidades sem mesclar
git fetch

Atualiza origin/* sem mexer nos seus arquivos.

Eu quero...Baixar de todos e limpar removidas
git fetch --all --prune

Remove referências a branches apagadas no servidor.

Eu quero...Baixar e mesclar
git pull

fetch + merge da branch rastreada.

Eu quero...Baixar com rebase
git pull --rebase

fetch + rebase: evita commits de merge desnecessários.

Eu quero...Enviar commits
git push

Envia a branch atual para o upstream.

Eu quero...Primeiro envio da branch
git push -u origin <branch>

Envia e define o upstream.

Eu quero...Forçar envio com segurança Cuidado
git push --force-with-lease

Sobrescreve o remoto só se ninguém enviou nada novo. Prefira ao --force.

Eu quero...Forçar envio Cuidado
git push --force

Sobrescreve o histórico remoto, podendo apagar commits de outras pessoas.

Eu quero...Fork: adicionar repositório original
git remote add upstream <url-original>

Para acompanhar o projeto de onde você fez o fork.

Eu quero...Fork: sincronizar com o original
git fetch upstream && git rebase upstream/main

Traz as novidades do projeto original.

Histórico

Eu quero...Ver histórico
git log

Commits com autor, data e mensagem.

Eu quero...Histórico em uma linha
git log --oneline

Hash curto e mensagem.

Eu quero...Histórico em gráfico
git log --oneline --graph --all --decorate

Visualiza branches e merges.

Eu quero...Últimos N commits
git log -n 5

Limita a quantidade.

Eu quero...Com arquivos alterados
git log --stat

Resumo de arquivos e linhas por commit.

Eu quero...Com as mudanças (patch)
git log -p

Mostra o diff de cada commit.

Eu quero...Commits de um autor
git log --author="Nome"

Filtra por autor.

Eu quero...Commits por período
git log --since="2 weeks ago" --until="yesterday"

Aceita datas e expressões em inglês.

Eu quero...Buscar na mensagem
git log --grep="login"

Commits cuja mensagem contém o texto.

Eu quero...Buscar quando um texto entrou/saiu
git log -S "nomeDaFuncao"

Encontra o commit que adicionou ou removeu o trecho.

Eu quero...Histórico de um arquivo
git log --follow -p -- <arquivo>

Inclui renomeações do arquivo.

Eu quero...Histórico de linhas de uma função
git log -L 10,30:<arquivo>

Evolução das linhas 10 a 30.

Eu quero...Commits que estão numa branch e não na outra
git log main..feature

O que a feature tem que a main ainda não tem.

Eu quero...Ver um commit
git show <commit>

Mensagem e diff do commit.

Eu quero...Ver arquivo em um commit
git show <commit>:<caminho/arquivo>

Conteúdo do arquivo naquela versão.

Eu quero...Quem alterou cada linha
git blame <arquivo>

Autor e commit de cada linha.

Eu quero...Blame de um trecho
git blame -L 10,30 <arquivo>

Só as linhas informadas.

Eu quero...Ranking de commits por autor
git shortlog -sn

Quantidade de commits de cada pessoa.

Eu quero...Versão pela última tag
git describe --tags

Ex.: v1.2.0-5-gabc123 (5 commits após a tag).

Diferenças

Eu quero...Mudanças não adicionadas
git diff

Diferença entre a pasta e o stage.

Eu quero...Mudanças no stage
git diff --staged

O que vai entrar no próximo commit.

Eu quero...Tudo desde o último commit
git diff HEAD

Stage e não adicionadas juntas.

Eu quero...Comparar branches
git diff main..feature

Diferença entre as pontas das branches.

Eu quero...Mudanças da branch desde que saiu da main
git diff main...feature

Três pontos: só o que foi feito na feature.

Eu quero...Comparar com commit anterior
git diff HEAD~1 HEAD

O que mudou no último commit.

Eu quero...Só nomes dos arquivos
git diff --name-only main

Lista os arquivos diferentes.

Eu quero...Resumo de linhas
git diff --stat

Quantidade de linhas por arquivo.

Eu quero...Diferença de um arquivo
git diff <commit> -- <arquivo>

Limita a um arquivo.

Eu quero...Diferença por palavra
git diff --word-diff

Destaca palavras alteradas, bom para textos.

Desfazer

Eu quero...Descartar mudanças de um arquivo Cuidado
git restore <arquivo>

Volta o arquivo ao último commit. A mudança é perdida.

Eu quero...Descartar todas as mudanças Cuidado
git restore .

Volta todos os arquivos rastreados ao último commit.

Eu quero...Restaurar arquivo de um commit
git restore --source <commit> <arquivo>

Traz a versão do arquivo daquele commit.

Eu quero...Desfazer commit mantendo no stage
git reset --soft HEAD~1

O commit some, as mudanças continuam prontas para commitar.

Eu quero...Desfazer commit mantendo nos arquivos
git reset HEAD~1

Modo --mixed (padrão): mudanças voltam para 'alterado'.

Eu quero...Desfazer commit apagando mudanças Cuidado
git reset --hard HEAD~1

Apaga o commit e as alterações.

Eu quero...Igualar a branch ao remoto Cuidado
git fetch origin && git reset --hard origin/main

Descarta tudo o que é local e fica igual ao servidor.

Eu quero...Desfazer commit já enviado (revert)
git revert <commit>

Cria um commit novo que desfaz o anterior. Seguro para histórico compartilhado.

Eu quero...Reverter um merge
git revert -m 1 <commit-do-merge>

Desfaz um merge mantendo o lado da branch principal.

Eu quero...Reverter vários commits
git revert --no-commit <inicio>^..<fim> && git commit

Desfaz um intervalo em um único commit.

Eu quero...Ver o que seria apagado (arquivos não rastreados)
git clean -n -d

Simulação: não apaga nada.

Eu quero...Apagar arquivos não rastreados Cuidado
git clean -fd

Remove arquivos e pastas novos que não estão no Git.

Eu quero...Apagar também os ignorados Cuidado
git clean -fdx

Inclui node_modules, builds, .env...

Stash

Eu quero...Guardar trabalho pela metade
git stash

Esconde as mudanças e deixa a pasta limpa.

Eu quero...Guardar com descrição
git stash push -m "tela de login"

Facilita achar depois.

Eu quero...Guardar incluindo arquivos novos
git stash -u

Inclui arquivos não rastreados.

Eu quero...Guardar só alguns arquivos
git stash push <arquivo1> <arquivo2>

Stash parcial.

Eu quero...Listar stashes
git stash list

stash@{0} é o mais recente.

Eu quero...Ver conteúdo do stash
git stash show -p stash@{0}

Diff completo do stash.

Eu quero...Recuperar e remover da lista
git stash pop

Aplica o mais recente e o apaga da lista.

Eu quero...Recuperar mantendo na lista
git stash apply stash@{1}

Aplica sem apagar.

Eu quero...Criar branch a partir do stash
git stash branch <nova-branch>

Útil quando o pop dá conflito.

Eu quero...Apagar um stash Cuidado
git stash drop stash@{0}

Remove um item da lista.

Eu quero...Apagar todos os stashes Cuidado
git stash clear

Limpa a lista inteira.

Tags e Versões

Eu quero...Listar tags
git tag

Mostra as tags do repositório.

Eu quero...Filtrar tags
git tag -l "v1.*"

Tags que seguem o padrão.

Eu quero...Criar tag anotada
git tag -a v1.0.0 -m "Versão 1.0.0"

Recomendado para releases: guarda autor, data e mensagem.

Eu quero...Criar tag simples
git tag v1.0.0

Tag leve, só um apontador.

Eu quero...Tag em commit antigo
git tag -a v0.9.0 <commit> -m "Versão 0.9.0"

Marca um commit do passado.

Eu quero...Enviar uma tag
git push origin v1.0.0

Tags não sobem com git push comum.

Eu quero...Enviar todas as tags
git push --tags

Envia todas as tags locais.

Eu quero...Ver uma tag
git show v1.0.0

Dados da tag e do commit.

Eu quero...Ir para a versão da tag
git switch --detach v1.0.0

Checkout em modo detached para inspecionar.

Eu quero...Excluir tag local
git tag -d v1.0.0

Remove a tag só na sua máquina.

Eu quero...Excluir tag remota Cuidado
git push origin --delete v1.0.0

Remove a tag do servidor.

Recuperação

Eu quero...Histórico de tudo o que o HEAD fez
git reflog

Mostra resets, rebases e checkouts: a salvação para commits 'perdidos'.

Eu quero...Voltar ao estado antes de um reset/rebase Cuidado
git reset --hard HEAD@{1}

Use o número mostrado no reflog.

Eu quero...Recuperar branch apagada
git switch -c <branch> <hash-do-reflog>

Cria a branch de novo a partir do commit encontrado no reflog.

Eu quero...Recuperar arquivo apagado
git restore --source HEAD~1 <arquivo>

Traz o arquivo de um commit anterior.

Eu quero...Achar commits soltos
git fsck --lost-found

Lista objetos sem referência (último recurso).

Eu quero...Achar commit que introduziu bug
git bisect start && git bisect bad && git bisect good <commit-bom>

Busca binária: o Git vai alternando commits para você testar.

Eu quero...Marcar resultado no bisect
git bisect good # ou: git bisect bad

Informe se o commit atual está bom ou ruim.

Eu quero...Bisect automático
git bisect run npm test

Roda o comando em cada passo e descobre sozinho.

Eu quero...Encerrar bisect
git bisect reset

Volta à branch original.

Busca e Inspeção

Eu quero...Buscar texto no código
git grep -n "texto"

Busca nos arquivos rastreados, com número da linha.

Eu quero...Buscar texto em um commit
git grep "texto" <commit>

Procura numa versão antiga.

Eu quero...Listar arquivos rastreados
git ls-files

Tudo o que o Git controla.

Eu quero...Hash do commit atual
git rev-parse HEAD

Hash completo (use --short para curto).

Eu quero...Nome da branch atual
git rev-parse --abbrev-ref HEAD

Útil em scripts.

Eu quero...Pasta raiz do repositório
git rev-parse --show-toplevel

Caminho da raiz.

Eu quero...Conteúdo de um objeto
git cat-file -p <hash>

Inspeciona commits, árvores e blobs.

Eu quero...Tamanho do repositório
git count-objects -vH

Espaço ocupado pelos objetos.

Submódulos e Worktree

Eu quero...Adicionar submódulo
git submodule add <url> <pasta>

Inclui outro repositório dentro deste.

Eu quero...Baixar submódulos
git submodule update --init --recursive

Necessário depois de clonar sem --recurse-submodules.

Eu quero...Atualizar submódulos para o remoto
git submodule update --remote --merge

Traz o último commit de cada submódulo.

Eu quero...Situação dos submódulos
git submodule status

Commit de cada submódulo.

Eu quero...Remover submódulo
git submodule deinit -f <pasta> && git rm -f <pasta>

Desregistra e apaga o submódulo.

Eu quero...Trabalhar em duas branches ao mesmo tempo
git worktree add ../hotfix hotfix

Cria outra pasta com a branch hotfix, sem stash.

Eu quero...Listar worktrees
git worktree list

Pastas ligadas ao repositório.

Eu quero...Remover worktree
git worktree remove ../hotfix

Apaga a pasta extra.

Eu quero...Clonar só algumas pastas
git sparse-checkout set src docs

Mantém no disco apenas as pastas informadas (repos grandes).

Patches e Arquivos

Eu quero...Gerar patch dos commits
git format-patch -3

Um arquivo .patch para cada um dos últimos 3 commits.

Eu quero...Aplicar patch com commit
git am < arquivo.patch

Aplica mantendo autor e mensagem.

Eu quero...Aplicar diff sem commit
git apply arquivo.diff

Aplica as mudanças nos arquivos.

Eu quero...Gerar zip do projeto
git archive --format=zip -o projeto.zip HEAD

Exporta os arquivos rastreados, sem a pasta .git.

Eu quero...Arquivo único com o repositório
git bundle create repo.bundle --all

Transporta o repositório offline (pendrive, e-mail).

Eu quero...Arquivos grandes (Git LFS)
git lfs install && git lfs track "*.psd"

Guarda binários grandes fora do histórico normal.

Eu quero...Ignorar mudanças locais de um arquivo
git update-index --skip-worktree <arquivo>

Ex.: arquivo de configuração local. Desfaça com --no-skip-worktree.

Manutenção

Eu quero...Otimizar repositório
git gc

Compacta objetos e remove lixo.

Eu quero...Manutenção automática
git maintenance start

Agenda otimizações periódicas em segundo plano.

Eu quero...Limpar referências remotas apagadas
git remote prune origin

Remove origin/* de branches que não existem mais.

Eu quero...Apagar branches locais já mescladas
git branch --merged main | grep -v "main" | xargs git branch -d

Limpeza em lote (Git Bash / Linux / Mac).

Eu quero...Remover arquivo de todo o histórico Cuidado
git filter-repo --path <arquivo> --invert-paths

Ex.: senha commitada. Requer git-filter-repo e reescreve todo o histórico.

Eu quero...Pasta de hooks do projeto
git config core.hooksPath .githooks

Versiona hooks (pre-commit, commit-msg) junto com o código.

Fluxos do dia a dia

Eu quero...Começar uma tarefa nova
git switch main && git pull && git switch -c feature/nome-da-tarefa

Parte sempre da main atualizada.

Eu quero...Enviar tarefa para Pull Request
git add . && git commit -m "feat: descrição" && git push -u origin feature/nome-da-tarefa

Depois abra o PR no GitHub/GitLab.

Eu quero...Juntar commits antes do PR Cuidado
git rebase -i main

Troque pick por squash nos commits que devem virar um só.

Eu quero...Corrigir urgente em produção (hotfix)
git switch main && git pull && git switch -c hotfix/descricao

Corrija, commite, faça PR e depois leve a correção para develop.

Eu quero...Commitei na branch errada
git reset --soft HEAD~1 && git stash && git switch <branch-certa> && git stash pop

Move o último commit (ainda não enviado) para outra branch.

Eu quero...Desfazer um push que quebrou produção
git revert <commit> && git push

Forma segura: não reescreve o histórico.

Eu quero...Publicar projeto existente no GitHub
git init && git add . && git commit -m "primeiro commit" && git branch -M main && git remote add origin <url> && git push -u origin main

Do zero até o repositório no ar.