Git School · FluxGit

Desfazer o último commit Git: soft reset ou revert

FluxGit ·

Os blocos são casos diferentes, não um script único. Escolha o caso do seu repositório. Substitua branches, caminhos e VERIFIED_COMMIT antes de usar. Comandos de cancelamento só valem para sua operação ativa; não execute ambas as alternativas.

Resposta curta

Para desfazer o último commit local mantendo alterações, reset --soft move a branch ao pai sem modificar índice e arquivos. Para desfazer um commit compartilhado, revert acrescenta um commit inverso. Decida antes se quer manter o código e se outras pessoas possuem esse histórico.

Exemplo e condições

O exemplo tem um commit comum, sem merge e com pai, na ponta atual, com árvore limpa e sem trabalho alheio no índice. O primeiro commit não tem pai HEAD^; merge tem vários. Nenhum corresponde ao atalho. Examine o grafo em vez de tratar HEAD~1 como botão universal de desfazer.

Inspecione antes de alterar

Leia patch, status e compartilhamento da branch. Tirar o commit para continuar o código, inverter código publicado e descartar tudo são resultados diferentes. Coordene antes de reescrever histórico publicado. Data recente ou seu nome de autor não prova que o commit é privado.

git status --short
git log -3 --oneline --decorate
git show --stat HEAD

Mantenha referência ou checkout separado

Crie rescue/before-undo em HEAD para manter o estado confirmado original. Salve arquivos sem commit à parte; a branch não os guarda. No exemplo limpo, soft reset deixa no índice só aquele patch. Um índice já modificado pode combinar várias tarefas no diff resultante e exige revisão própria.

git branch rescue/before-undo HEAD
SCHOOL_UNDO=$(git rev-parse HEAD)

Primeiro fluxo

No caso local que preserva mudanças, execute reset --soft HEAD^ e confira diff --cached. O conteúdo continua no índice e na árvore, pronto para outro commit. Reset mixed tem efeito diferente no índice. Não use --hard só para encurtar o status: ele também altera arquivos de trabalho.

git reset --soft HEAD^
git diff --cached
git status --short

Escolha o outro resultado deliberadamente

Para commit comum compartilhado, guarde seu ID verificado em SCHOOL_UNDO e use revert. O novo commit inverte a alteração e mantém o histórico recebido pelos colegas. Confira resultado e verificações antes de push normal. Merge exige selecionar o pai principal e entender efeitos em merges futuros; use procedimento específico.

git revert "$SCHOOL_UNDO"

Limites e exceções

Revert pode conflitar com trabalho posterior. Leia status, resolva e prepare os arquivos e use revert --continue. Use revert --abort se escolheu a alteração ou resultado errado. Reset --soft não possui estado correspondente de continuar ou abortar. Não misture os fluxos com um revert ainda ativo.

git status
git revert --abort

Conflitos e limpeza

Descartar também código confirmado e arquivos locais é outra decisão destrutiva, não o padrão deste guia. Preserve e confira o estado primeiro. Trabalho sem commit não está no reflog. Com restore points ativados e mudanças locais detectadas, FluxGit pode salvar um safety stash antes de hard reset suportado; este terminal não aciona aquela proteção.

Confira o resultado

Depois de soft reset, compare ponta e patch preparado com o resgate. Depois de revert, confira que o inverso só altera o desejado e mantém trabalho posterior útil. Execute verificações relevantes. Guarde o resgate durante a revisão; um comando concluído sem erro não prova correção do código.

git log -4 --oneline --decorate
git status --short
git diff --cached

Perguntas frequentes

Soft reset apaga arquivos? Mantém árvore e índice, movendo a referência. Revert remove o original? Não, registra outra alteração inversa. Reflog recupera tudo? Não: trata estados locais retidos e objetos confirmados, não conteúdo arbitrário de arquivos não salvos.

Revise a operação no FluxGit

Use o histórico visual e a visão de alterações do FluxGit para revisar a operação e os commits relevantes. Mantenha as verificações de branch, compartilhamento e arquivos locais do exemplo. A página de download apresenta os builds e plataformas disponíveis.

Referências oficiais do Git

Fluxos relacionados

Baixar FluxGit