Git Reset

2 min

Índice

  1. O que é Reset?
  2. Os 3 modos de Reset
  3. Reset Soft
  4. Reset Mixed
  5. Reset Hard
  6. Perigo e precauções
  7. Comandos práticos

1. O que é Reset?

Git reset = recuar no tempo ao anular commits.

Conceito:

  • Deslocar a branch para um commit anterior
  • 3 modos consoante o que se guarda ou apaga
  • DESTRUTIVO se mal usado

Analogia: é como apagar páginas de um caderno.

Voltar ao índice

2. Os 3 modos de Reset

ModoCommitsIndex/StagingWorking Directory
--softAnulaConservaConserva
--mixedAnulaApagaConserva
--hardAnulaApagaApaga

Memo simples:

  • Soft = só os commits
  • Mixed = commits + staging
  • Hard = TUDO (perigoso!)

Voltar ao índice

3. Reset Soft

Uso: refazer o último commit com mais alterações.

bash
mkdir demo-reset && cd demo-reset
git init

echo "print('v1')" > app.py && git add . && git commit -m "Version 1"
echo "print('v2')" > app.py && git add . && git commit -m "Version 2"

# Reset soft: anula o commit, guarda tudo em staging
git reset --soft HEAD~1

git status                    # Alterações staged prontas
git log --oneline            # Um commit a menos
cat app.py                   # Conteúdo v2 ainda lá

# Novo commit com mensagem melhorada
git commit -m "Version 2 - Avec nouvelles features"

Voltar ao índice

4. Reset Mixed

Uso: anular commits E retirar do staging (modo por omissão).

bash
echo "print('v3')" > app.py && git add . && git commit -m "Version 3"

# Reset mixed (ou simplesmente git reset)
git reset HEAD~1

git status                   # Alterações NÃO staged
git log --oneline           # Commits anulados
cat app.py                  # Conteúdo v3 ainda lá, mas não staged

# É preciso voltar a add antes do commit
git add . && git commit -m "Version 3 - Refait proprement"

Voltar ao índice

5. Reset Hard

PERIGO: apaga TUDO, até as modificações sem commit!

bash
echo "print('v4')" > app.py && git add . && git commit -m "Version 4"

# Modificações em curso
echo "print('work in progress')" >> app.py

# Reset hard: TUDO DESAPARECE
git reset --hard HEAD~1

git status                  # Working directory clean
cat app.py                 # Voltou a v2, work in progress PERDIDO!

Uso: quando quer MESMO deitar tudo fora e recuar.

Voltar ao índice

6. Perigo e precauções

Reset é DESTRUTIVO com commits partilhados!

NUNCA faça isto:

bash
git push origin main           # Commits partilhados com a equipa  
git reset --hard HEAD~3        # Apaga 3 commits partilhados
git push --force              # Força a eliminação em toda a gente
# = CAOS na equipa!

Regra de segurança:

  • Reset OK em commits locais (não enviados)
  • Reset PROIBIDO em commits já partilhados
  • Alternativa: git revert (mais seguro)

Voltar ao índice

7. Comandos práticos

ComandoAção
git reset HEAD~1Anula 1 commit (mixed)
git reset --soft HEAD~2Anula 2 commits, guarda o staging
git reset --hard HEAD~1Anula 1 commit, apaga TUDO
git reset <hash>Voltar a um commit específico
git reset --hard origin/mainReset na versão remota

Reset = poderoso mas perigoso. Use com precaução!

Voltar ao índice