Executando verificação de segurança...
1

[GIT] Reset - Aula 7

Reset

O comando Reset é usado para desfazer alterações no histórico do repositório, pode ser usado para remover commits, modificar a Staging Area, ou alterar a posição do ponteiro HEAD para um commit anterior.

Como fazer um Reset

Soft

O Reset soft é usado para desfazer commits recentes, mas mantém as alterações na Staging Area, seria uma espécie de CRTL + Z (desfazer), mas mantendo o que foi desfeito pronto para ser reutilizado.

Ele basicamente irá mover o ponteiro HEAD para um Commit anterior, desfazendo as mudanças Commitadas, e movendo elas para Staging Area, deixando-as prontas para serem Commitadas novamente.

git reset --soft Commit_Hash

Caso não queira digitar a Hash do Commit, Você pode usar o HEAD seguido por um número de passos para voltar no histórico:

git reset --soft HEAD~1

Exemplo:

A -> B -> C (HEAD)

Vamos supor que o Commit "C" foi enviado com alterações erradas, e precisamos modificar algumas coisas que foram Commitadas.

Executamos:

git reset --soft C_Hash

ou

git reset --soft HEAD~1

Após a execução do comando, o ponteiro que antes estava em "C", agora retorna para "B", e as alterações de "C" ficarão na Staging Area, para que sejam corrigidas e Recommitadas.

O que acontece com "C"?

Podemos pensar erroneamente que "C" é deletado imediatamente, entretanto o que realmente acontece é o desreferenciamento.

Desreferenciamento: A partir do momento em que você move o ponteiro para o Commit "B", o Commit "C" não está mais referenciado por nenhuma Branch, Isso significa que "C" se torna um Commit órfão.

O commit "C" permanecerá no repositório até que o Git faça um Garbage Collection, que pode ocorrer automaticamente de tempos em tempos ou quando você a força manualmente com git gc. Durante essa operação, o Git remove Commits órfãos que não estão referenciados por nenhuma Branch, Tag ou outro objeto.

Obs: Se você quiser recuperar o commit "C" antes que ele seja excluído pelo Garbage Collector, você pode fazê-lo usando o git reflog.

Hard

O Reset hard é o oposto do soft, ele não apenas move o ponteiro HEAD para um commit anterior, mas também desfaz todas as mudanças feitas nos arquivos e na Staging Area, ou seja, ele retornará tudo para a forma que estava antes do Commit, deletando todas as alterações e arquivos.

Obs: O Reset hard apaga as alterações marcadas como Unstaged, mas não as alterações Untracked.

Para fazer um Reset hard use:

git reset --hard Commit_Hash

ou

git reset --hard HEAD~1

Cuidado

Conforme dito anteriormente, o Reset hard irá apagar todas as alterações feitas pelo Commit, assim sendo, certifique-se de que você realmente não precisa dessas mudanças, sempre execute git status para garantir que não há alterações importantes que você ainda queira salvar.

Obs: Em caso de emergência, ainda é possível recuperar as alterações por meio de Reflog.

Mixed

Como o nome sugere, o Reset mixed é um misto entre soft e hard. Ele irá mover o ponteiro HEAD para o Commit especificado, restaurando o estado do diretório de trabalho, mas sem tocar nos arquivos não Commitados da Staging Area.

Para fazer um Reset mixed use:

git reset --mixed Commit_Hash

ou

git reset --mixed HEAD~1

Ao executar o comando, as alterações do Commit são removidas da Staging Area, ou seja, os arquivos vão para o estado de Unstaged.

Resumindo

--soft: Move o HEAD para o commit especificado e mantém as mudanças tanto na Staging Area quanto no diretório de trabalho. Ou seja, você pode facilmente commitá-las.

--mixed: Move o HEAD para o commit especificado, remove as mudanças da Staging Area, mas as mantém no diretório de trabalho.

--hard: Move o HEAD para o commit especificado e descarta todas as mudanças, tanto na Staging Area quanto no diretório de trabalho.

Carregando publicação patrocinada...