Git rebase: como preservar commits de merge

Dicas - 09/Ago/2020 - por André Kanamura

Um dos problemas que podemos encontrar quando vamos executar um rebase de commits numa branch do projeto é que ele ignora os commits de merge que foram executados anteriormente no histórico. Fica mais fácil de entender com um exemplo. Vamos considerar o log abaixo:

$ git log
4d09232 Merge remote-tracking branch 'origin/react_hooks' into fix-links [Benjamin Button]
2a09b35 Removes the docs path from the url  [Benjamin Button]
7ab1154 add talks [Benjamin Button]

Ao iniciarmos o processo de rebase desses commits com git rebase -i HEAD~3:

pick 7ab1154 add talks
pick 2a09b35 Removes the docs path from the url
pick d067764 create hooks                     # commit do merge
pick 14f28d7 WIP other hooks                  # commit do merge
pick 1f159b7 Add useRef                       # commit do merge
pick 1e29013 Corrections based on comments    # commit do merge

Note como os commits que compõem o commit de merge são apresentados como opções para reorganização. Agora se quisermos preservar o comit de merge, podemos usar a opção --rebase-merges: git rebase -i HEAD~3 --rebase-merges:

pick 7ab1154 add talks
pick 2a09b35 Removes the docs path from the url
pick 4d09232 Merge remote-tracking branch 'origin/react_hooks' into fix-links

A opção --rebase-merges foi introduzida na versão 2.18 do Git e substitui a antiga --preserve-merges, que foi descontinuada na versão 2.22.

Referências

Foto de perfil do autor
André Kanamura

Dev na Campus Code