Escolha conforme o estado do trabalho
| Situação | Comando | Resultado |
|---|---|---|
| Retirar um arquivo da preparação | git restore --staged -- file.txt | Mantém as edições na árvore de trabalho. |
| Desfazer o último commit local mantendo as alterações preparadas | git reset --soft HEAD~1 | Recua a branch em um commit. |
| Reverter um commit já compartilhado | git revert <commit> | Adiciona um commit que reverte a alteração. |
Confira primeiro git status e git log --oneline -5. O exemplo de reset exige um commit pai e se aplica a uma branch privada. Um commit de merge precisa de uma análise separada; não escolha o pai principal por tentativa.
Teste um reset local em um repositório de exercício
Use um diretório novo e vazio, fora do seu projeto. O exercício cria dois commits, remove o segundo do histórico da branch e mantém sua alteração preparada para commit.
git init -b main
git config user.name "DevSheet Demo"
git config user.email "demo@example.invalid"
printf "one\n" > note.txt
git add note.txt
git commit -m "First note"
printf "two\n" >> note.txt
git commit -am "Second line"
git reset --soft HEAD~1
git status --short
git diff --cachedResultado esperado: M note.txt no status curto e uma linha two adicionada no diff preparado. O arquivo continua com as duas linhas.
Evite perder alterações
git reset --hard pode descartar edições não commitadas em arquivos rastreados e sobrescrever caminhos não rastreados que atrapalhem a operação. O exercício acima não precisa dessa opção.
git restore -- file.txt substitui edições não preparadas de arquivos rastreados; com --staged, altera o índice. Se uma branch foi movida por engano, confira git reflog e crie uma branch de recuperação no commit antigo verificado. Reflog não recupera todas as alterações não commitadas.