Git: How to rebase and squash commits from branch to master?

Viacheslav Kondratiuk picture Viacheslav Kondratiuk · Mar 31, 2013 · Viewed 26.7k times · Source

I'm trying to rebase and squash all my commits from current branch to master. Here is what I'm trying to do:

git checkout -b new-feature

make a couple of commits, after it I was trying:

git rebase -i master

in this case commits will remain in new-feature branch

git checkout master
git rebase -i new-feature

It gives me and edit window with noop message.

I know about command:

git merge --squash new-feature

But I'm currently working on learning of rebase command.

Answer

Joe picture Joe · Aug 3, 2013

Lets go though the steps.

1 - We create a new feature branch

git checkout -b new-feature

2 - Now you can add/remove and update whatever you want on your new branch

git add <new-file>
git commit -am "Added new file"
git rm <file-name>
git commit -am "Removed a file"
cat "add more stuff to file" >> <new-file>
git commit -am "Updated files"

3 - Next, pick and squash any commits down into one nice pretty commit message

git rebase -i master

The key thing you need to remember here is to change the text that says "pick" to "squash" for all of the commits after the first commit. This will squash all of the commits down to your master branch.

4 - Select the master branch

git checkout master

5 - Move the HEAD and the master branch to where new-feature is:

git rebase new-feature

You can try all of the commands out in this visual tool: http://pcottle.github.io/learnGitBranching/