Mono
Lista de espera

Como desfazer alterações feitas por um agente de programação com IA

Desfaça com segurança as edições de um agente de programação com IA: restaure um ficheiro, descarte o que ficou sem commit ou reverta o commit do agente, sem perder o seu trabalho.

Para desfazer as alterações de um agente de programação com IA, veja o que mudou e use o comando Git correspondente: git restore para ficheiros editados, git clean para ficheiros novos e git revert para um commit. Antes disso, guarde uma cópia de segurança com git stash. O /rewind do próprio Claude Code também consegue restaurar código, mas não acompanha todas as alterações.

Este guia começa depois de ter decidido descartar o trabalho; rever alterações de código feitas por IA ajuda a decidir. O Mono mostra o que mudou, mas não o desfaz, por isso também aí os comandos são os mesmos.

1. Pare o agente e veja o que mudou

Primeiro, pare o agente. No Mono, o botão de enviar passa a ser um botão de cancelar enquanto o agente trabalha. Num terminal na pasta do projeto, execute:

text
git status
git log --oneline -5

O primeiro lista os ficheiros modificados, eliminados, preparados (staged) e novos. O segundo mostra os commits recentes, incluindo os que o agente tenha feito. Anote que alterações são suas: os comandos para desfazer não sabem quem escreveu cada linha.

O que vê Como desfazer
Ficheiro modificado ou eliminado, não preparado git restore <path>
Alteração preparada git restore --staged <path> e depois desfaça a alteração no ficheiro
Ficheiro novo, não acompanhado pelo Git git clean -n <path> e depois git clean -f <path>
Um commit que não queria git revert <commit>

No Mono, «Mostrar alterações» lista os ficheiros modificados e novos desde o último commit, por isso não mostra um commit feito pelo agente.

2. Guarde primeiro uma cópia de segurança

Restaurar e limpar descartam definitivamente o trabalho sem commit, por isso guarde tudo primeiro:

text
git stash push --include-untracked -m "before undo"
git stash apply --index

O primeiro guarda os ficheiros modificados e novos e limpa a árvore de trabalho; o segundo repõe-nos e mantém o que estava preparado. Nada parece diferente, mas git stash list passa a ter uma cópia chamada «before undo».

Se desfizer demasiado, git restore --source "stash@{0}" <path> recupera um ficheiro editado a partir do stash mais recente.

3. Desfaça um ficheiro ou uma parte dele

Escolha o comando mais restrito:

  • git restore <path> descarta as edições não preparadas nesse ficheiro.
  • git restore --staged <path> retira uma alteração da área de preparação, mas mantém a edição no ficheiro.
  • git restore -p <path> pergunta por cada parte alterada (hunk) em separado, o que ajuda quando tanto você como o agente editaram o mesmo ficheiro.
  • git clean -n <path> lista os ficheiros não acompanhados que git clean -f <path> removeria. Indique sempre um caminho.

A documentação do git restore explica cada opção.

4. Desfaça tudo o que o agente deixou sem commit

Se nenhuma das alterações for sua, descarte-as todas a partir da raiz do projeto com git restore --staged --worktree . e depois use git clean -n . e git clean -f . para os ficheiros novos. Caso contrário, trabalhe caminho a caminho.

Eis um exemplo fictício: pediu a um agente que mudasse o nome da classe CSS .btn-primary para .button-main num projeto «tidy-recipes». Antes, ele tinha feito um commit com uma atualização do lockfile que ninguém pediu. Desta vez, alterou a classe em 3 ficheiros, reformatou 12 ficheiros sem relação com a tarefa e criou styles/tokens.css. Entretanto, você editou o README.md à mão e quer manter essa edição.

Depois da cópia de segurança, restaure os ficheiros do agente (aqui, src/ e styles/main.css) e remova o ficheiro novo que ele criou:

text
git restore src/ styles/main.css
git clean -n styles/tokens.css
git clean -f styles/tokens.css

Não use git restore . aqui: também descartaria a sua edição do README. Se tivesse edições dentro de src/, teria de indicar os ficheiros do agente um a um.

Agora git status lista apenas README.md, e git diff mostra apenas as suas linhas. O commit do lockfile continua lá.

5. Desfaça um commit que o agente já fez

git revert regista um commit novo que inverte um anterior. A documentação do git revert diz que precisa de uma árvore de trabalho limpa, por isso ponha primeiro de lado a sua edição do README:

text
git stash push -m "readme" README.md
git revert <lockfile commit>
git stash pop

Use o hash que aparece em git log e acrescente --no-edit para saltar o editor da mensagem. git stash pop recupera «readme» e deixa «before undo» na lista. Agora git status lista apenas README.md, e git log --oneline mostra Revert "Update lockfile" no topo.

Para um commit já enviado com push, prefira o revert ao git reset, que reescreve um histórico que outras pessoas podem já ter. Se um commit parecer perdido depois de um reset ou de um rebase, git reflog lista os commits em que esteve recentemente, com os respetivos hashes.

6. Use os checkpoints do agente, com o Git como rede de segurança

O Claude Code guarda um checkpoint antes de cada pedido: execute /rewind, ou prima Esc duas vezes com a caixa de texto vazia, para restaurar o código, a conversa ou ambos. A documentação sobre checkpoints indica os limites: as alterações feitas por comandos de shell não são acompanhadas, as edições feitas fora do agente normalmente não ficam registadas e os checkpoints não substituem o controlo de versões. A disponibilidade também depende da aplicação em que corre o agente.

Por isso, faça do Git a sua rede de segurança:

  • Faça um commit ou crie um ramo antes de cada tarefa, para que «o último commit» signifique «antes do agente».
  • Diga ao agente que não faça commits sem perguntar, por exemplo no seu ficheiro AGENTS.md.
  • Mantenha as aprovações ativas. O Modo YOLO do Mono, que aceita todos os pedidos do agente, está desativado por predefinição. Consulte o que verificar antes de permitir.

No Mono, o cartão de um projeto abre um terminal na pasta do projeto no seu computador, também a partir do telemóvel (consulte o guia de programação remota). O Mono ainda não está disponível, mas pode inscrever-se na lista de espera.

Escrito por

A Reunified cria aplicações que voltam a juntar o que está disperso.

Continua a ler

Todos os artigos

Brevemente

Junta-te à lista de espera

Deixa o teu email e escrevemos-te quando o Mono estiver pronto para descarregar.

Onde vai usar o Mono?