domingo, 24 de fevereiro de 2019

Usando rebase para unificar as alterações no git.

Voltamos ao assunto do git

Essa é uma continuação do https://www.adilson.net.br/2018/02/removendo-commits-indesejaveis-do.html onde, por algum motivo, não conseguimos remover aquela entrada indesejável, após a correção do código das dicas anteriores. Mas, antes, volto a repetir o disclaimer abaixo:

OBS: Este blog não se responsabiliza por estragos causados por quem seguir as dicas a seguir. Se não quer ter problemas no seu repositório ou no repositório dos outros, FAÇA UM BACKUP PRIMEIRO. Seja dando um clone em outro lugar, copiando a pasta .git para um outro lugar ou dando um tar/zip no seu repositório. Depois não venha chorando dizendo que fez besteira.


Agora vamos voltar para a seguinte situação. Os estagiários fizeram tanta alterações no meio, por exemplo:

Number Hash     Commit Message               Author

1      2c6a45b  (HEAD) Adicionando novidades Desenv.
2      93bf23d  bla bla bla bla bla          Estagiário 1
2      ae45fab  Melhorando banco de dados    Estagiário 1
3      77b9b82  Corrigindo banco de dados    Estagiário 2
4      3c9093c  Dando merge com master       Desenv.
5      b3d92c5  Adicionando novo evento      Colega
6      7feddbb  Adicionando arquivos         Desenv.
7      a809379  Commit inicial               Desenv.

Você tenta seguir a dica anterior:

git rebase --onto HEAD~4 HEAD~1 master


Mas acaba em:

Um monte de erros antes...

error: Failed to merge in the changes.
Patch failed at 0001 Adicionando novidades
hint: Use 'git am --show-current-patch' to see the failed patch

Resolve all conflicts manually, mark them as resolved with
"git add/rm ", then run "git rebase --continue".
You can instead skip this commit: run "git rebase --skip".
To abort and get back to the state before "git rebase", run "git rebase --abort"
.

E agora????

Nem tudo está perdido. Antes rode o comando: "git rebase --abort",  "git reset --hard origin/master" e, rode este comando:

git rebase -i HEAD~4 


Vai aparecer várias linhas para fazer as alterações neste estilo:

pick 77b9b82 Corrigindo banco de dados
pick ae45fab Melhorando banco de dados
pick 93bf23d bla bla bla bla bla
pick 2c6a45b Adicionando novidades


Note que a ordem está inversa. Agora, de cima para baixo, troque, a partir da seguinda linha, a palavra pick por squash (ou s que o resultado é o mesmo). O resultado fica, mais ou menos assim:

pick 77b9b82 Corrigindo banco de dados
s ae45fab Melhorando banco de dados
s 93bf23d bla bla bla bla bla
s 2c6a45b Adicionando novidades

Salva e uma outra janela de edição aparece. Neste caso ele mostra todas as linhas dos commits. Comenta todas, menos a que você deseja manter. Isso não altera no resultado final. Mas, como você quer se livrar dos commits indesejáveis, comentar faz todo sentido.

Daí só salva e os commits antigos foram devidamente eliminados quando foi feito a unificação. Mas isso só vale se fez a devida correção no seu commit. Caso contrário faça alguns reverts antes e siga a mesma dica, mudando apenas o número das linhas no HEAD, que aumentou com os reverts.

Mais informações em:

https://www.internalpointers.com/post/squash-commits-into-one-git


Tenham um bom domingo uma ótima semana.


Nenhum comentário:

Postar um comentário