Git é uma daquelas ferramentas que a gente aprende 10% dos comandos e usa 100% do tempo. Tem três flags em particular que mudaram minha relação com o git e que ninguém me ensinou — descobri tropeçando no man git num plantão chato. Compartilho.

1. git log --oneline --graph --all

A flag não é uma só, é uma combinação. Mas ela transforma o git log de uma lista linear sem fim em um mapa visual do repositório inteiro.

git log --oneline --graph --all

O que cada parte faz:

  • --oneline colapsa cada commit em uma linha só (hash curto + título)
  • --graph desenha as branches com caracteres ASCII
  • --all mostra todas as branches, não só a atual

Quando eu uso: sempre que entro num repo novo ou quando preciso entender o que aconteceu numa branch que tá esquisita. É o primeiro comando depois de um git pull confuso.

Bônus: adiciona --decorate pra ver tags e nomes de branches inline.

2. git stash push -m "mensagem" -- caminho/especifico

Todo mundo conhece git stash. Quase ninguém sabe que dá pra dar stash em arquivos específicos com mensagem.

git stash push -m "ajuste de css experimental" -- src/components/Button.css

Por que isso importa: o git stash padrão guarda tudo que tá modificado, sem nome. Em duas semanas você tem 8 stashes anônimos e nenhuma ideia do que cada um faz. Com mensagem e caminho, cada stash é uma intenção clara.

Pra ver o que tem guardado:

git stash list

Pra aplicar um stash específico:

git stash apply stash@{2}

Quando eu uso: quando tô trabalhando em duas features ao mesmo tempo (sim, eu sei que não devia) e preciso pausar uma sem fazer commit ainda. Ou quando descubro que aquele teste que tá quebrando não é da minha PR — guardo o conserto em separado pra abrir uma PR depois.

3. git commit --fixup=<hash>

Esse aqui é o tipo de coisa que muda como você escreve commits. A flag cria um commit especial marcado pra ser “amassado” com outro commit antigo no próximo rebase.

Cenário comum: você abre uma PR. O revisor pede uma mudança pequena num arquivo. Você poderia:

  • Fazer um commit “fix typo” e poluir o histórico
  • Fazer git commit --amend e quebrar o histórico se já deu push
  • Ou: usar fixup
# Vê o hash do commit que você quer corrigir
git log --oneline

# Faz a correção e commita marcando como fixup
git add arquivo.js
git commit --fixup=abc1234

# Quando estiver pronto pra mergear, rebase interativo com autosquash
git rebase -i --autosquash main

O --autosquash automaticamente posiciona o fixup logo abaixo do commit original e marca pra ser amassado. Você só precisa salvar e sair.

Quando eu uso: literalmente em toda revisão de código. PRs ficam com histórico limpo, sem aqueles “fix review”, “fix again”, “ok now it works” no log.

Bônus: configurações pra deixar tudo isso melhor

Coloca no teu ~/.gitconfig:

[alias]
    lg = log --oneline --graph --all --decorate
    
[rebase]
    autosquash = true
    autostash = true

Com essas configs, o primeiro comando vira só git lg, e todo rebase já assume autosquash e dá stash automático nas mudanças não commitadas.

Anota aí. Próxima vez que abrir um terminal, tenta.