git rebase interactive: squash merge commits together git rebase interactive: squash merge commits together git git

git rebase interactive: squash merge commits together


This is an old topic, but I just ran across it while looking for similar information.

A trick similar to the one described in Subtree octopus merge is a really good solution to this type of problem:

git checkout my-featuregit reset --soft Ygit rev-parse f > .git/MERGE_HEADgit commit

That will take the index as it exists at the tip of my-feature, and use it to create a new commit off of Y, with 'f' as a second parent. The result is the same as if you'd never performed M1, but gone straight to performing M2.


if you haven't published the last two merge commits, you could do a reset and a simple merge.

git reset --hard Ygit merge stable


I came to this topic wanting to squash a single merge commit; so my answer is not that useful to the original question.

               X                \                    \  a --- b --- c --- M1 (subtree merge)

What I wanted was to rebase the M1 merge and squash everything as a single commit on top of b.

a --- b --- S (include the changes from c, X and M1)

I tried all kinds of different combinations but this is what worked:

git checkout -b rebase b (checkout a working branch at point b)git merge --squash M1

This will apply the changes into the index where they can be committed git commit