Desfazendo o último commit e mantendo as alterações para um próximo commit
Desfazer e refazer commits faz parte do dia-a-dia, então é importante entender os comandos que podem ajudar a gente nesse caminho. Nessa colinha eu vou te ensinar a fazer duas coisas:
- Desfazer o último commit de forma que você possa manter as alterações em staging;
- Reaproveitar o conteúdo do commit desfeito para fazer um novo commit.
Com esses dois comandos no seu repertório de comandos Git você será muito mais feliz. 😉
Criando o cenário
Eu falei sobre o comando git reset
nesta outra colinha, em resumo ele é um comando que permite retornar à um estado anterior. O uso mais básico deste comando é usá-lo para desfazer um ou mais commits dos mais recentes. Com isso, vamos supor que você está na seguinte situação (curiosamente eu passei por isso na última sexta):
- Você fez um commit no branch incorreto;
- Ainda não enviou esse novo commit para o remote;
- Você quer desfazer esse commit e refazer-lo no branch correto.
Para exemplificar eu tenho aqui um histórico de um projeto em que temos dois commits: o commit inicial no branch main
(d815be
) e o segundo commit (5e8ae2
) adicionando o arquivo-1.txt
que deveria ser em outro branch, veja:
Agora chegou a hora de desfazer o nosso commit incorreto.
Desfazendo o último commit de forma soft
Dado esse cenário, o primeiro passo é usar o comando git reset
. Talvez você não saiba que existe uma flag que ao desfazer um commit com o git reset
permite que você mantenha as alterações do commit em staging e a mensagem de commit guardada numa variável especial que vou te mostrar jájá, essa flag é a --soft
.
Então podemos montar o nosso comando assim:
git reset HEAD^ --soft
A flag --soft
indica que você quer desfazer o commit de forma mais sutil, ou seja, mantendo as alterações. Ao executar esse comando, você não receberá nenhuma mensagem, mas as alterações estão em staging, o que você pode conferir com o comando git status
e o resultado é o seguinte:
Agora vamos refazer o commit no lugar certo e reaproveitar a mensagem.
Reaproveitando a mensagem de commit
Agora que você já desfez o commit e tem as alterações em staging, pode criar o novo branch e mudar pra ele, eu falei do comando anterior nesta outra colinha caso você queira conferir:
git switch -c add-arquivos-novos
Com isso, chega o momento tão esperado, provavelmente você já sabe que para fazer commits, precisa usar o comando git commit
. Como nosso reset
foi do tipo soft
a mensagem do commit ficou armazenada na variável ORIG_HEAD
, então para reaproveitá-la você deve usar a flag -C
seguida da variável, assim:
git commit -C ORIG_HEAD
Essa flag -C
quer dizer literalmente “reutilizar mensagem”, e esse é o resultado:
Por fim, se você quiser editar a mensagem, você deve usar a flag -c
no lugar da flag atual, isso vai te dar a oportunidade de ajustar a mensagem anterior antes de terminar o commit.
GitFichas
Espero que esses comandos te ajudem a reaproveitar o trabalho feito.