Git: Renomear, desfazer, mesclar, editar ou excluir commits
Se você sempre quis saber ou se já sabe mais nunca lembra os comandos de como renomear, desfazer, excluir, editar ou mesclar um ou mais commits você chegou no lugar certo. ;)
Antes de tudo precisamos saber que com o comando abaixo conseguimos visualizar a hash, mensagem e a ordem que os commits foram feitos:
git log --oneline
- Renomeando um commit
Para mudar a mensagem do último commit, você pode utilizar o --amend:
git commit -m "Nova mensagem que vai substituir a anterior" --amend
Para mudar a mensagem de um commit específico, você pode usar o rebase interativo:
git rebase -i f0b5417~1Repare no ~1, isso indica que irá buscar o commit da hash indicada e todos os demais commits a partir dela. Se você não colocar o ~1 o commit da hash pesquisa não irá ser mostrado no editor de texto a ser aberto, apenas os commits a partir dela.
Caso você queira buscar os 3 últimos commits:
git rebase -i HEAD~3
Seu editor de texto irá iniciar. Troque no texto a palavra pick por reword (ou só r) do commit desejado, exemplo:
pick fef7501 Terceiro commit reword 90d77f4 Segundo commit pick b82a17f Primeiro commit
Salve o arquivo e feche seu editor. Seu editor será iniciado novamente, dessa vez com a mensagem original do commit a ser modificado. Modifique-a, salve e feche o editor.
Nesse momento seu commit já estará com a mensagem nova e você já pode fazer o push de sua branch. Se você já tiver feito o push anteriormente será nescessário fazer um push forçado:
git push -f
Mas cuidado pois esse comando irá excluir o commit que você havia feito anteriormente e irá criar um novo commit enviando-a para o servidor.
- Mesclando dois commits e descartando a mensagem de um
Primeiramente identifique a hash do commit que você quer mesclar e execute o comando abaixo alterando b82a17f para a hash que você identificou:
git rebase -i b82a17f~1
Seu editor de texto irá iniciar. Troque no texto a palavra pick por fixup (ou só f) do commit que você quer mesclar, exemplo:
pick fef7501 Terceiro commit fixup 90d77f4 Segundo commit pick b82a17f Primeiro commit
Nesse momento a hash 90d77f4 será mesclada com a hash fef7501 e a mensagem da hash 90d77f4 será mantida e a mensagem da hash fef7501 será descartada. Para ver o log basta digitar git log
- Mesclando vários commits de uma só vez
Iremos mesclar os 3 últimos commits e para isso iremos executar o comando:
git rebase -i HEAD~3
Seu editor de texto irá iniciar. Troque no texto a palavra pick por squash (ou só s) dos commits que você quer mesclar, exemplo:
pick fef7501 Terceiro commit squash 90d77f4 Segundo commit squash b82a17f Primeiro commit
Salve o arquivo e feche seu editor. Seu editor será iniciado novamente mostrando algo parecido com isso:
# This is a combination of 3 commits. # This is the 1st commit message: Terceiro commit # This is the commit message Segundo commit # This is the commit message Primeiro commit
Nesse momento você pode comentar as mensagens do primeiro e segundo commit colocando um # antes da mensagem, caso não queira mesclar as mensagens dos três commits em uma única mensagem. Caso queira você pode colocar uma nova mensagem de commit para essa mesclagem:
# This is a combination of 3 commits. # This is the 1st commit message: Nova mensagem para o commit # This is the commit message # Segundo commit # This is the commit message # Primeiro commit
Pronto, após salvar o arquivo os commite serão mesclados e será gerado um novo commit com a mensagem que você informou.
Note que nesse momento pode ser que gere algum conflito e você terá que tratá-los para finalizar a edição.
- Desfazendo commits
Para excluir um ou mais commits mas mantendo as alterações dos arquivos, basta executar o comando abaixo:
git reset HEAD~1
Note que o ~1 indica que iremos desfazer apenas o último commit. Assim que o comando for executado o commit será excluído e as alterações serão revertidas para o estado working directory, aquele momento antes do git add e git commit.
Caso você queira excluir o commit e suas alterações basta adicionar o --hard ao comando:
git reset --hard HEAD~1
Se você quer desfazer um commit mas manter o seu comentário basta executar:
git revert HEAD
- Excluindo commits
Iremos buscar os 3 últimos commits e para isso iremos executar o comando:
git rebase -i HEAD~3
Seu editor de texto irá iniciar. Troque no texto a palavra pick por drop (ou só d) dos commits que você quer excluir, exemplo:
pick fef7501 Terceiro commit drop 90d77f4 Segundo commit drop b82a17f Primeiro commitSalve o arquivo e feche seu editor. Você deverá ver uma mensagem de sucesso e se rodar o comando git log --oneline verá que os commits foram excluídos.
Você poderia fazer isso utilizando o git reset --hard mais a probabilidade de dar problema é bem grande, caso você não tenha domínio sobre o comando.
Dica:
Pode ser que em algum momento, durante o comando de git rebase -i, você tenha que rodar o comando git rebase --continue ou git rebase --abort para cancelar a operação.
- Editando arquivos de um determinado commit
Essa ação é muito útil durante o desenvolvimento, principalmente quando temos muitos commits e precisamos alterar um commit mais antigo, assim evitando problemas de conflito.
Iremos buscar os 3 últimos commits e para isso temos que executar o seguinte comando:
Seu editor de texto irá iniciar. Troque no texto a palavra pick por edit (ou só e) do commit que você quer alterar, exemplo:
Essa ação é muito útil durante o desenvolvimento, principalmente quando temos muitos commits e precisamos alterar um commit mais antigo, assim evitando problemas de conflito.
Iremos buscar os 3 últimos commits e para isso temos que executar o seguinte comando:
git rebase -i HEAD~3
Seu editor de texto irá iniciar. Troque no texto a palavra pick por edit (ou só e) do commit que você quer alterar, exemplo:
pick fef7501 Terceiro commit pick 90d77f4 Segundo commit edit b82a17f Primeiro commitSalve o arquivo e feche seu editor. Para confirmar que você está apito para editar o commit selecionado, basta digitar o comando git status e você verá uma mensagem parecida com essa: interactive rebase in progress;
Nesse momento você pode fazer as alterações nos arquivos que são referentes as mudanças do commit selecionado.
Para salvar as mudanças e voltar sua branch para o status padrão devemos seguir alguns passos:
- rodar o comando para adicionar os arquivos alterados: git add .
- fazer um commit dessas novas alterações para o mesmo commit que está sendo alterado: git commit --amend Nesse momento irá abrir o editor confirmando o commit ao qual deverá ser aplicada as alterações, basta salvar e sair do editor.
- concluir o rebase com o comando git rebase --continue Caso você queira cancelar as alterações aplicadas basta executar o comando git rebase --abort
Pronto nesse momento as alterações no arquivos já foram aplicadas ao commit selecionado anteriormente.
Comentários
Postar um comentário