Pular para o conteúdo

Git

versionamento
Comando O que faz
git log --oneline --graph --decorate --all Visão geral do histórico
git log -p <arquivo> Histórico com diff do arquivo
git log --since="2 days ago" --author=ana Filtra por data e autor
git log --stat Arquivos alterados por commit
git show <sha> Detalhe de um commit
git diff / git diff --staged Não preparado / preparado
git diff main...minha-branch Diferença desde a divergência
git blame -L 40,60 <arquivo> Quem alterou cada linha
Comando O que faz
git switch <branch> Troca de branch
git switch -c <nova> Cria e troca
git switch - Volta para a anterior
git branch -vv Branches locais e seus upstreams
git branch -d <branch> Remove branch já mesclada
git branch --merged main O que já foi integrado (candidatas a remoção)
git restore <arquivo> Descarta alteração local do arquivo
git restore --staged <arquivo> Tira da área de preparo

switch e restore substituem os usos ambíguos de checkout.

Situação Comando
Corrigir a mensagem do último commit git commit --amend
Desfazer commit, manter alterações preparadas git reset --soft HEAD~1
Desfazer commit, manter alterações no diretório git reset HEAD~1
Descartar alterações locais git reset --hard HEAD
Reverter um commit já publicado git revert <sha>
Recuperar branch apagada ou reset errado git reflog e git reset --hard <sha>

Em branch compartilhada, use revert (cria um commit novo) em vez de reset — reescrever histórico publicado quebra o clone de todo mundo.

git reflog é a rede de segurança do Git: quase tudo que “sumiu” nos últimos 90 dias está lá.

Comando O que faz
git rebase main Reaplica sua branch sobre a main
git rebase --onto main antiga nova Move um trecho de commits
git rebase --abort Cancela e volta ao estado anterior
git rebase --continue Segue após resolver conflito
git cherry-pick <sha> Traz um commit específico
git push --force-with-lease Força sem sobrescrever trabalho alheio

Prefira sempre --force-with-lease a --force: ele recusa o push se alguém publicou algo que você não viu.

Janela do terminal
git status # o que está em conflito
git diff --name-only --diff-filter=U
git checkout --ours <arquivo> # mantém o lado atual
git checkout --theirs <arquivo> # mantém o lado que chega
git add <arquivo> && git rebase --continue
git merge --abort # desiste do merge
Comando O que faz
git stash push -m "wip" Guarda alterações
git stash list / git stash pop Lista / restaura a última
git stash push -u Inclui arquivos não rastreados
git worktree add ../hotfix main Segunda cópia de trabalho, sem clonar de novo
git worktree remove ../hotfix Remove a cópia

Worktree é o jeito limpo de atender uma urgência sem abandonar o que está pela metade.

Janela do terminal
git log -S 'AKIA' --all --oneline # quando um texto entrou ou saiu (segredo!)
git log -G 'senha' --all # busca por regex no diff
git bisect start && git bisect bad && git bisect good <sha>
git bisect run ./teste.sh # automatiza a bissecção
git grep -n "TODO" $(git rev-list --all) # procura em todo o histórico
Comando O que faz
git remote -v Lista remotos
git fetch --all --prune Atualiza e remove referências mortas
git pull --rebase Traz sem criar merge desnecessário
git push -u origin <branch> Publica e define upstream
git clone --filter=blob:none <url> Clone parcial (repositório grande)
git clone --depth 1 <url> Clone raso (CI)
Janela do terminal
git config --global pull.rebase true
git config --global push.autoSetupRemote true
git config --global rerere.enabled true # lembra resoluções de conflito
git config --global core.autocrlf input # Linux/macOS
git config --global core.autocrlf true # Windows
git config --global diff.algorithm histogram
  • reset --hard descarta alterações não commitadas sem recuperação (o reflog só guarda o que foi commitado).
  • git clean -fd apaga arquivos não rastreados. Rode -n antes para simular.
  • Arquivo já rastreado não passa a ser ignorado por entrar no .gitignore: use git rm --cached.
  • Reescrever histórico não apaga um segredo vazado: rotacione a credencial primeiro.
  • No Windows, fim de linha errado gera diffs de arquivo inteiro; configure autocrlf.