Tenho o seguinte repositório:
A--B--C--D--E--F--G--H--I--J
\
K--L--M
main -> J
DEV -> M
Quero compactar os commits entre B e E para que o repositório fique assim:
A--N--F--G--H--I--J
\
K--L--M
main -> J
DEV -> M
Tentei fazer um squash interativo, mas o melhor que consegui foi algo assim:
N--F'-G'-H'-I'-J'
/
A--B--C--D--E--F--G--H--I--J
\
K--L--M
remote/main -> J
main -> J'
DEV -> M
então a ramificação DEV não está anexada onde deveria estar.
Qual é a maneira de fazer isso?
Você pode usar um interativo
--rebase-merges
depois de ter um commit de mesclagem descartável no topo:Nós construímos esta história:
usando
O resultado da mesclagem (
X
) é irrelevante, pois vamos jogá-lo fora de qualquer maneira. Usar a estratégia de mesclagemours
garante que o comando de mesclagem seja bem-sucedido.Agora você pode fazer um rebase interativo:
No script "todo", especifique o squash de
B
toE
e também exclua o comando merge na última linha, conforme mostrado aqui:--updated-refs
garante que o branchDEV
seja recolocado em cima do branch lateral reescrito. Você precisa da versão 2.38 do Git para isso. Se o seu for mais antigo, deixe de lado a opção e recoloque o rótulo do branch manualmente.BTW, o script que
git rebase
prepara as reconstruções confirmaB
noG
branch "side"DEV
. Isso não deve te surpreender: os commits estão naquele branch.