
Passo 1 de 7
Identificar o que precisa ser desfeito
Identifique onde está a alteração e o que você quer preservar antes de escolher como desfazer.
Trilha de aprendizado · Nível 1 · Tutorial 4
Você será capaz de escolher o comando certo para desfazer uma alteração conforme o estágio em que ela está: arquivo de trabalho, área de preparação ou commit já registrado, sempre conferindo o estado antes e depois e sem perder trabalho por engano.
Identificar o que precisa ser desfeito
Identifique onde está a alteração e o que você quer preservar antes de escolher como desfazer. 2 min
Retirar da preparação sem apagar a edição
Retire as alterações de notas.txt da área de preparação e confirme que a edição continua no arquivo. 3 min
Descartar uma edição com consciência
Descarte uma edição não preparada apenas quando tiver certeza de que pode perdê-la e confira o resultado no arquivo e no Git. 3 min
Corrigir a mensagem do último commit local
Corrija apenas a mensagem do último commit não compartilhado e confira que o conteúdo permaneceu igual. 3 min
Desfazer um commit preservando o histórico
Reverta uma mudança fictícia pelo identificador do commit e confirme que o efeito foi desfeito sem apagar o registro original. 4 min
Reconhecer atalhos perigosos
Reconheça quando um comando pode apagar trabalho ou alterar um histórico que outras pessoas já usam. 2 min
Escolher, executar e conferir com segurança
Escolha a ação pela intenção, execute um caso local e reúna evidências de que apenas o esperado mudou. 4 min

Passo 1 de 7
Identifique onde está a alteração e o que você quer preservar antes de escolher como desfazer.
“Desfazer” pode significar ações diferentes. Primeiro, identifique o estágio da alteração e o que você quer preservar:
A mesma palavra — desfazer — não significa apagar tudo.

Localize a alteração e nomeie a intenção antes de agir.
Relacione cada situação ao estágio e à intenção adequada.
Toque em um item e depois no par correspondente.
Crie uma pasta nova e vazia chamada pratica-desfazer, fora dos seus outros repositórios. Use-a exclusivamente nestes exercícios, sem compartilhar o repositório.
No seu editor, crie nessa pasta o arquivo notas.txt, com o conteúdo fictício abaixo, e salve. Depois, abra o terminal nessa pasta.
Notas de estudo
Tema: Git local
Execute um comando por vez, somente na pasta nova. Se ocorrer algum erro, pare e confira antes de continuar.
git init
git add notas.txt
git commit -m "Cria notas de estudo"Use os comandos que você já conhece: status para localizar alterações, diff para conferir a edição não preparada, diff --staged para conferir o que está preparado e log --oneline para identificar commits.
Agora execute os quatro para conferir o ponto de partida.
git status
git diff
git diff --staged
git log --onelineExemplo
O status indica que não há alterações pendentes; os dois comandos diff não exibem diferenças; o log mostra um commit com a mensagem “Cria notas de estudo”. O identificador será próprio do seu repositório.
Abra notas.txt e confirme as duas linhas salvas. Esse é o ponto de partida para a próxima prática.
Dica
Não execute uma ação para desfazer por tentativa. Confira a pasta atual, o arquivo e o estado do repositório primeiro. Antes de agir, complete: “A alteração está em _ e quero preservar _”.

Passo 2 de 7
Retire as alterações de notas.txt da área de preparação e confirme que a edição continua no arquivo.
Você preparou um arquivo por engano, mas quer continuar trabalhando na edição? Use git restore --staged notas.txt.
Esse comando faz a versão de notas.txt na área de preparação voltar à do último commit. O conteúdo do arquivo de trabalho fica intacto, e os commits existentes não mudam.

Retirar da preparação mantém a edição no arquivo de trabalho.
No seu computador, use o repositório local de prática criado no passo anterior, que já tem um commit com notas.txt. Execute git status e prossiga apenas se não houver alterações pendentes. Se aparecer algo inesperado, pare e confira antes de editar.
Abra notas.txt no seu editor e acrescente a linha abaixo ao final, sem apagar o conteúdo existente. Salve o arquivo.
Ideia de teste: revisar esta nota depois.No terminal, dentro dessa pasta, execute os comandos abaixo. A alteração deve aparecer como preparada, e o diff da preparação deve mostrar a linha acrescentada. Vamos simular que essa preparação foi um engano.
git add notas.txt
git status
git diff --stagedAgora retire apenas notas.txt da preparação. Execute a sequência abaixo: o primeiro comando faz a mudança; os demais conferem o resultado.
git restore --staged notas.txt
git status
git diff --staged
git diffConfira estas evidências:
git status: notas.txt aparece modificado, mas não preparado para commit.git diff --staged: não exibe diferenças.git diff: mostra a linha acrescentada.Não faça outro git add nem um commit agora: deixe a edição fora da preparação para a próxima etapa.
Dica
Neste caso, o arquivo continuar modificado é o resultado correto. Você queria retirar a preparação, não perder a edição.
Depois de executar a prática, quais evidências mostram que notas.txt saiu da preparação sem perder a edição? Relate o que observou em git status, git diff --staged, git diff e no próprio arquivo. Se algo foi diferente do esperado, descreva a diferença.
Escreva pelo menos 30 caracteres (0/30).

Passo 3 de 7
Descarte uma edição não preparada apenas quando tiver certeza de que pode perdê-la e confira o resultado no arquivo e no Git.
git restore notas.txt substitui o conteúdo do arquivo de trabalho pela versão da área de preparação. Isso pode eliminar edições que você ainda não registrou.
Nesta prática, não há alterações preparadas. Por isso, a versão restaurada coincide com a do último commit.
A diferença essencial: git restore --staged notas.txt preserva a edição no arquivo; git restore notas.txt pode descartá-la.

O conteúdo vem da preparação para o arquivo de trabalho. O comando não altera os commits.
Atenção
Conteúdo apenas digitado, nunca preparado nem registrado, não pode ser recuperado pelo Git após o descarte. Não conte com recuperação de trabalho não registrado. Se tiver dúvida, pare e salve uma cópia do conteúdo fora da pasta do repositório antes de agir.
Para retirar uma alteração da preparação e manter a edição no arquivo, posso usar git restore notas.txt no lugar de git restore --staged notas.txt.
Use somente o repositório local de exercícios dos steps anteriores. No seu editor, acrescente ao final de notas.txt a linha abaixo, salve e não execute git add:
Rascunho descartável: testar outra ideia.
No terminal, dentro dessa pasta, execute as conferências abaixo. Observe o conteúdo anterior mostrado no diff e o histórico atual.
git status
git diff -- notas.txt
git diff --staged
git log --onelineContinue somente se notas.txt tiver alterações não preparadas, git diff --staged não mostrar diferenças e não houver outro estado inesperado.
Leia todo o diff: a restauração descartará todas as alterações não preparadas de notas.txt, inclusive a edição que ficou do step anterior, não apenas a linha recém-adicionada. Você aceita perder todas elas? Se não, pare e preserve uma cópia.
Se aceita, execute os comandos abaixo. Depois, reabra notas.txt: as edições descartadas devem desaparecer. O status deve indicar estado limpo, o diff não deve mostrar diferenças e o log deve permanecer igual.
git restore notas.txt
git status
git diff -- notas.txt
git log --onelineO que mudou em notas.txt e o que permaneceu igual no histórico? Relate as evidências que você conferiu. Se interrompeu a prática por segurança, explique o que encontrou e o que decidiu preservar.
Escreva pelo menos 30 caracteres (0/30).

Passo 4 de 7
Corrija apenas a mensagem do último commit não compartilhado e confira que o conteúdo permaneceu igual.
A mensagem do último commit ficou inadequada? Neste exercício, você vai corrigi-la com git commit --amend -m, informando a nova mensagem diretamente no terminal.
O --amend substitui o último commit por outro: não é uma edição de texto no mesmo registro. Ao mudar a mensagem, o identificador também muda.

Apenas o último commit é substituído. Corrigir somente a mensagem deve manter o conteúdo dos arquivos igual.
Atenção
Use apenas o último commit do repositório de exercícios, exclusivamente local e ainda não compartilhado. Exija estado limpo e preparação vazia: alterações preparadas também podem entrar no commit substituto, mesmo que sua intenção seja corrigir só a mensagem.
“Como vou usar -m para corrigir a mensagem, posso deixar outras alterações na área de preparação: elas não entrarão no commit substituto.”
No terminal, entre na pasta de exercícios usada nos steps anteriores. Abra notas.txt no seu editor e anote seu conteúdo, sem editar. Execute os comandos abaixo e anote o identificador e a mensagem da primeira linha do log: esse é o último commit.
git status
git diff --staged
git log --onelineContinue apenas se git status indicar estado limpo, git diff --staged não mostrar nada e o commit nunca tiver sido compartilhado. Se alguma condição falhar, pare sem descartar trabalho para forçar esse resultado.
Use a mensagem abaixo, diferente da atual. Depois dos comandos, releia notas.txt: seu conteúdo deve continuar igual. No log, a primeira linha deve ter a nova mensagem e um novo identificador; a quantidade de commits deve permanecer a mesma.
git commit --amend -m "Documentar a base local de notas"
git status
git diff --staged
git log --onelineRelate o resultado usando os identificadores reais de antes e depois, a nova mensagem e a comparação do conteúdo de notas.txt. Como ficaram o status e as diferenças preparadas? Se não executou a correção, explique qual condição de segurança não foi atendida.
Escreva pelo menos 30 caracteres (0/30).

Passo 5 de 7
Reverta uma mudança fictícia pelo identificador do commit e confirme que o efeito foi desfeito sem apagar o registro original.
git revert <commit> inverte as alterações do commit escolhido e registra essa inversão em um novo commit. O original continua no histórico.
Diferentemente do amend, que substitui o último commit, o revert acrescenta um registro. Ele não apaga o commit escolhido nem faz todo o projeto voltar indiscriminadamente a um ponto antigo.
O roteiro é: conferir o estado, identificar a mudança registrada, reverter e verificar arquivo e histórico.

No revert, o commit da mudança e o commit que a desfaz ficam no histórico.
Uma mudança fictícia já foi registrada. Ordene as etapas para desfazê-la com segurança.
Use a pasta local exclusiva dos exercícios anteriores. Execute git status e só prossiga se não houver alterações pendentes.
Abra notas.txt no seu editor. Observe o conteúdo atual e, sem substituir nenhuma linha, acrescente ao final a linha fictícia abaixo. Salve o arquivo.
Lembrete fictício: comprar um telescópio.Execute uma linha por vez. No diff, confirme que a única mudança é a linha acrescentada; se aparecer algo diferente, pare antes de preparar ou registrar.
git diff -- notas.txt
git add notas.txt
git commit -m "Adiciona lembrete fictício do telescópio"
git status
git log --onelineO status deve indicar estado limpo. No topo do log, localize a mensagem “Adiciona lembrete fictício do telescópio” e copie o identificador abreviado à esquerda dela. Esse é o commit simples que você acabou de criar e vai reverter.
No comando abaixo, substitua IDENTIFICADOR pelo código real copiado do seu log. Não digite a palavra IDENTIFICADOR literalmente.
A opção --no-edit mantém a mensagem automática do novo commit, sem abrir um editor de mensagens.
Atenção
Execute a reversão somente com estado limpo e com o commit correto identificado. Se aparecer conflito, erro ou um estado inesperado, interrompa a sequência. Não tente resolver com uma operação destrutiva; a resolução de conflitos fica fora desta prática.
git revert --no-edit IDENTIFICADORSe a reversão terminar sem erro, execute os comandos abaixo e reabra notas.txt. A linha do telescópio deve ter desaparecido e o restante deve estar igual ao conteúdo anterior. O status deve estar limpo e o diff, vazio. No log, procure o novo commit de reversão acima do commit original, que continua presente.
git status
git diff -- notas.txt
git log --onelineDepois da prática, descreva o que mudou em notas.txt, o que apareceu no status e quais dois commits você encontrou no topo do log. Se não conseguiu concluir, relate onde parou em vez de presumir o resultado.
Escreva pelo menos 40 caracteres (0/40).

Passo 6 de 7
Reconheça quando um comando pode apagar trabalho ou alterar um histórico que outras pessoas já usam.
Atenção
O comando git reset --hard pode eliminar alterações locais em arquivos rastreados, inclusive alterações já preparadas, sem pedir confirmação. Não o use como solução genérica para “deixar tudo limpo” nesta prática.
Um git status limpo informa que não há alterações pendentes; não prova que seu trabalho foi preservado. Depois de desfazer algo, confira também o conteúdo dos arquivos e, quando a ação envolver commits, o histórico. O resultado precisa corresponder à sua intenção, não apenas parecer organizado.
Você preparou notas.txt por engano, mas quer manter toda a edição. Alguém sugere git reset --hard para “resolver tudo”. Qual é a decisão adequada?
Substituir um commit que outras pessoas já usam pode deixar vocês com históricos diferentes e dificultar a colaboração. Aqui, amend é uma exceção controlada: corrigir somente a mensagem do último commit ainda não compartilhado, com a preparação vazia.
Para desfazer o efeito de um commit compartilhado, prefira revert: ele mantém os registros existentes e acrescenta o commit inverso.

Preservar os commits existentes mantém uma base comum com quem já usa esse histórico.
Dica
Não sabe se o commit foi compartilhado ou se pode perder uma edição? Interrompa a ação, inspecione o estado e preserve uma cópia do conteúdo importante. Confirme o compartilhamento antes de substituir qualquer commit.
O último commit contém uma mudança que precisa ser desfeita. Ele já foi compartilhado e outra pessoa o está usando. Você conferiu o identificador e o estado está limpo. Qual é a opção adequada?

Passo 7 de 7
Escolha a ação pela intenção, execute um caso local e reúna evidências de que apenas o esperado mudou.
git status, os diffs e o log conforme o caso.
Antes de executar, existe uma saída segura: parar e preservar. Depois, confira o que mudou e o que permaneceu intacto.
Relacione cada situação à ação adequada. Nas respostas, <id> representa o identificador real do commit conferido no log.
Toque em um item e depois no par correspondente.
No seu computador, abra o repositório exclusivo desta prática, que já tem commits e o arquivo fictício notas.txt. Execute os comandos abaixo e anote o identificador do último commit. Continue apenas se o estado estiver limpo e o diff preparado não mostrar diferenças. Se algo estiver inesperado, pare sem tentar limpar à força.
git status
git diff --staged
git log --oneline -3No seu editor, acrescente ao final de notas.txt esta linha e salve:
Lembrete fictício: revisar as notas amanhã.
Execute o próximo bloco por etapas. Após preparar, confira se o diff mostra somente a linha acrescentada. Só então retire da preparação. No final, reabra o arquivo: a linha deve continuar lá, embora não esteja mais preparada.
Se a conferência revelar outras mudanças, interrompa a sequência.
# Prepare e inspecione antes de desfazer a preparação
git add notas.txt
git status
git diff --staged
# Continue apenas se aparecer somente a alteração esperada
git restore --staged notas.txt
# Confira o resultado
git status
git diff --staged
git diff
git log --oneline -3Qual comando você usou e por que ele atendia à intenção? Relate o estado antes e depois, o que apareceu nos dois diffs, se a linha permaneceu no arquivo e se o último commit mudou. Não é necessário enviar arquivos.
Escreva pelo menos 60 caracteres (0/60).
Resumo
Inspecione → confira as condições → execute → verifique. Evite git reset --hard como atalho.
Parabéns! Você concluiu: Desfazer alterações com segurança
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks