Je voulais avoir une solution simple à la courge deux de fusion s'engage pendant un rebase interactif.
Mon référentiel ressemble:
X --- Y --------- M1 -------- M2 (my-feature)
/ / /
/ / /
a --- b --- c --- d --- e --- f (stable)
C'est, j'ai un my-feature
de la branche qui a été fusionnée à deux reprises récemment, sans vraiment s'engage entre les deux. Je ne veux pas de rebase l' my-feature
de la branche depuis qu'il est publié de la direction de son propre, je veux juste de courge les deux dernières fusion s'engage dans un (n'ai pas publié ces commet encore)
J'ai essayé:
git rebase -p -i M1^
Mais j'ai eu:
Refusing to squash a merge: M2
Ce que j'ai finalement fait est:
git checkout my-feature
git reset --soft HEAD^ # remove the last commit (M2) but keep the changes in the index
git commit -m toto # redo the commit M2, this time it is not a merge commit
git rebase -p -i M1^ # do the rebase and squash the last commit
git diff M2 HEAD # test the commits are the same
Maintenant, la nouvelle fusion s'engager n'est pas considéré comme une opération de fusion s'engager plus (il n'a gardé que le premier parent). Donc:
git reset --soft HEAD^ # get ready to modify the commit
git stash # put away the index
git merge -s ours --no-commit stable # regenerate merge information (the second parent)
git stash apply # get the index back with the real merge in it
git commit -a # commit your merge
git diff M2 HEAD # test that you have the same commit again
Mais cela peut devenir compliqué si j'ai beaucoup s'engage, avez-vous une meilleure solution ? Merci.
Mildred