Git: Desfazendo mudanças locais sem prejudicar o código

Até que você "dê push" em alterações locais, elas estarão disponíveis apenas para você, e existem algumas maneiras diferentes de reverter mudanças em um repositório Git.

Resposta curta: Para desfazer alterações locais completamente, sem salvá-las, utilize: git clean -fd.

Neste artigo eu vou falar apenas sobre como desfazer alterações locais antes do commit. E vou mostrar duas soluções para isso: A primeira permite que você salve as alterações para mais tarde, e a segunda desfaz completamente todas as alterações.

Eu assumo que você já tenha algum entendimento de git para adicionar arquivos (git add), fazer commit (git commit), etc.

Verificando as alterações

Para visualizar quais arquivos foram alterados, bem como se os arquivos já foram adicionados ou não, utilize:

git status

Para ver as alterações específicas, linha por linha, utilize:

# Todos os arquivos no repositório:
git diff
# Ou para arquivos específicos:
git diff <arquivo>

Desfazendo alterações locais sem perdê-las

Se você precisa trocar de branch ou fazer outro commit sem incluir alterações que já fez no código, você pode usar o comando git stash para salvá-las para mais tarde.

O comando git stash salva todas as alterações atuais em arquivos adicionados no local e joga essas alterações em uma lista, deixando o repositório no mesmo estado do último commit.

Por exemplo, digamos que você fez alterações no arquivo index.html, mas logo em seguida viu que na verdade precisava resolver algum problema em outra branch.

Você ainda não quer fazer commit do index.html, mas seria bom salvar essas alterações. Este é o caso de usarmos git stash:

git add index.html
git stash

Logo, as alterações de index.html serão salvas e enfileiradas em um esconderijo (stash), deixando o repositório da mesma forma como estava no último commit.

Para visualizar as alterações em stash, utilize:

git stash list

Para retornar as alterações em stash de volta para a área de trabalho, utilize:

git stash pop

Podem haver diversas modificações em stash, e elas permanecem neste "esconderijo" local até que você utilize o comando git stash pop.

Desfazendo alterações locais sem salvar

Se você quer desfazer permanentemente as alterações locais antes do commit, dê uma olhada nas situações que organizei abaixo e veja em qual delas você se aplica:

Para desfazer um git add:

# Defazer git add . (todos os arquivos)
git reset

# Desfazer git add <arquivo>
git reset <arquivo>

Cuidado, este comando faz você perder as alterações que fez nos arquivos locais: Para desfazer todas as alterações locais, retornando para o estado do último commit local:

# Desfazer alterações de um arquivo específico
git checkout -- <arquivo>

# Desfazer alterações de todos os arquivos locais
git reset --hard

Para remover arquivos não adicionados (untracked), que não passaram pelo git add: (Arquivos adicionados não serão removidos)

# Para arquivos
git clean -f

# Para diretórios
git clean -fd


Este artigo foi útil pra você?

Ricardo Metring

Ricardo Metring

Sou desenvolvedor full stack e co-fundador da Criar.io.
Trabalho há 10 anos com programação e sempre interessado em aprender mais.

Linkedin     Github

Artigos relacionados