Git: Interactively rebase a range of commits

achalk picture achalk · Jul 26, 2017 · Viewed 15.1k times · Source

I'm trying to rebase -i a few commits that occurred a while back in my history. Say I have a log like this:

* 5e32fb0 (HEAD -> master) Add latest feature
* 106c31a Add new feature
* 2bdac33 Add great feature
...100 other commits...
* 64bd9e7 Add test 3
* 3e1066e Add test 2
* 26c612d Add test 1
* 694bdda Initialize repo

and I want to squash the 3 test commits. In these circumstances, git rebase -i HEAD~106 isn't very practical. What I'm looking for instead is something like git rebase -i 64bd9e7:26c612d.

Does git have this sort of behaviour, and if so, how can I use it?

I had a look at this post, but it didn't answer my question.

Answer

hspandher picture hspandher · Jul 26, 2017

Just use rebase -i and squash only those commits.

git rebase -i <main_branch>
# Now just add `s` in front of all the commits you want to squash

If you have many commits, I'd suggest you to take a look at rebase --onto -

git rebase --onto <final_base_commit> <initial_base_commit> <head>

git rebase --onto 694bdda 64bd9e7 5e32fb0

Note: Rewriting history is an advanced operation, so tread with care.

Git rebase tutorial