Mais de 200 comandos Git explicados em português, por situação: branches, remoto, stash, rebase e como desfazer commit, add, push e merge. Com busca.
Cola de comandos Git
Os comandos do Git que se usam de verdade, agrupados pela situação em que você está, e não em ordem alfabética. Busque por palavra (“desfazer”, “renomear branch”, “force”), filtre por grupo e copie o comando com um clique. Os que apagam trabalho levam um aviso de cuidado.
Como ler os comandos
- O que está entre
< e > é para trocar: <arquivo>, <branch>, <commit>, <url>. Em git switch <branch>, digite git switch main, sem os sinais. <commit> aceita o hash (completo ou os primeiros 7 caracteres), um branch, uma tag ou uma referência relativa.HEAD é o commit em que você está. HEAD~1 é o anterior, HEAD~3 é três commits atrás.origin é o apelido padrão do repositório remoto, e origin/main é a cópia local do branch main que está no servidor, atualizada a cada git fetch.- No PowerShell, ponha entre aspas as referências com chaves:
git reset --hard 'HEAD@{1}' e git stash apply 'stash@{2}'. Sem aspas, o PowerShell interpreta as chaves e o comando falha.
As três áreas do Git
Quase toda confusão com add, restore e reset some quando se entende que o Git trabalha com três lugares:
| Área | O que é | Como entra | Como sai |
|---|
| Pasta de trabalho | Os arquivos no seu disco | Você edita | git restore <arquivo> descarta |
| Staging (índice) | O rascunho do próximo commit | git add | git restore --staged <arquivo> |
| Histórico | Os commits gravados | git commit | git reset ou git revert |
git diff compara a pasta de trabalho com o staging. git diff --staged compara o staging com o último commit.
switch e restore no lugar de checkout
Até 2019, git checkout fazia duas coisas sem relação entre si: trocava de branch e descartava alterações de arquivos. O Git 2.23 (agosto de 2019) separou as funções em dois comandos:
| Tarefa | Comando atual | Forma antiga |
|---|
| Trocar de branch | git switch main | git checkout main |
| Criar branch e trocar | git switch -c nova | git checkout -b nova |
| Descartar alteração | git restore arquivo.txt | git checkout -- arquivo.txt |
| Tirar do staging | git restore --staged arquivo.txt | git reset HEAD arquivo.txt |
As formas antigas continuam funcionando e aparecem em muito tutorial. Esta cola mostra a atual e cita a antiga logo abaixo, para você reconhecer as duas.
reset: soft, mixed e hard
Os três modos movem o branch para o commit indicado. A diferença é o que fazem com as alterações dos commits que ficaram para trás:
| Modo | Staging | Arquivos no disco | Resultado |
|---|
--soft | mantém | mantém | Alterações ficam preparadas para um novo commit |
--mixed (padrão) | limpa | mantém | Alterações ficam nos arquivos, sem add |
--hard | limpa | sobrescreve | Alterações são descartadas |
Só o --hard destrói trabalho, e destrói também o que você ainda não tinha commitado.
reset ou revert?
git reset apaga commits do histórico do branch. Use em commits que ainda não foram enviados.git revert cria um commit novo que desfaz outro. O histórico só cresce, então é seguro em branch compartilhado e em commit que já foi para o remoto.
Se você fez reset em algo que já tinha enviado, o git push normal será recusado. O push forçado resolve, mas reescreve o remoto: faça isso só em branch que é só seu.
Por que —force-with-lease
git push --force substitui o branch remoto pelo seu, sem olhar o que há lá. Se um colega enviou commits depois do seu último fetch, eles somem sem aviso.
git push --force-with-lease faz a mesma coisa com uma trava: só sobrescreve se o branch remoto ainda estiver no ponto que o seu Git conhece. Se alguém enviou algo, o push é recusado e você tem a chance de olhar. Um detalhe: ferramentas que rodam git fetch sozinhas em segundo plano atualizam esse ponto e enfraquecem a trava.
Merge ou rebase?
- Merge junta os dois históricos e, quando eles divergiram, cria um commit de merge. Não reescreve nada. É a opção segura em branches compartilhados.
- Rebase refaz os seus commits em cima de outra base. O histórico fica em linha reta, mas os commits ganham hashes novos.
A regra prática: rebase à vontade em commits que só existem na sua máquina ou em um branch só seu; nunca em commits que outras pessoas já baixaram.
O reflog é a rede de segurança
git reflog lista todas as posições por onde o HEAD passou, inclusive commits “apagados” por reset --hard, por um rebase ou junto com um branch. Ache o hash e volte com git reset --hard <commit> ou recrie o branch com git branch <nome> <commit>.
Duas limitações importantes: o reflog é local (não vai para o remoto nem vem no clone) e expira. Por padrão, entradas de commits que já não fazem parte do branch são mantidas por 30 dias, e as demais por 90. E ele só conhece o que foi commitado: alteração descartada com git restore, git reset --hard ou git clean antes de qualquer commit não volta.
Limitações desta cola
- É um guia de consulta, não substitui a documentação oficial, que descreve todas as opções de cada comando.
- Os comandos foram testados no Git 2.42. Alguns pedem versões mínimas, indicadas na descrição:
git switch e git restore (2.23), git init -b (2.28), git stash push --staged (2.35), push.autoSetupRemote (2.37). Confira a sua com git --version. - Comandos de plataformas (pull request, fork, GitHub CLI) ficaram de fora: não fazem parte do Git.
Ferramentas relacionadas
Perguntas frequentes
Como desfazer o último commit no Git?
Se ainda não enviou: git reset --soft HEAD~1 desfaz o commit e mantém as alterações preparadas. Para descartar também as alterações, git reset --hard HEAD~1. Se o commit já foi enviado para um branch compartilhado, use git revert HEAD, que cria um commit desfazendo o anterior.
Como voltar um arquivo para a versão do último commit?
git restore <arquivo> (ou, na forma antiga, git checkout -- <arquivo>). Se o arquivo já estava no staging, rode antes git restore --staged <arquivo>, ou use git restore --staged --worktree <arquivo> para fazer as duas coisas. A alteração descartada não pode ser recuperada.
Qual a diferença entre git fetch e git pull?
git fetch só baixa as novidades do remoto e atualiza origin/main e os demais branches remotos; seus arquivos não mudam. git pull faz o fetch e, em seguida, integra as novidades ao branch atual, por merge ou por rebase, conforme a configuração.
Como recuperar um stash apagado ou commits perdidos?
Para commits, git reflog mostra as posições anteriores do HEAD. Para um stash removido com drop, o reflog do HEAD não ajuda; a tentativa é git fsck --lost-found, que lista objetos sem referência, e nem sempre dá certo. Por isso git stash drop e git stash clear aparecem com aviso.
Enviei uma senha em um commit. Basta apagar o commit?
Não. Mesmo com o commit removido do branch por push forçado, ele pode continuar acessível no servidor, em forks e em clones de outras pessoas. Trate a senha ou a chave como vazada e troque-a imediatamente; depois cuide da limpeza do histórico.
git add . ou git add -A?
Rodados na raiz do repositório, fazem o mesmo. A diferença aparece em uma subpasta: git add . prepara só o que mudou dali para baixo, e git add -A prepara as mudanças do repositório inteiro.