Merge (with squash) all changes from another branch as a single commit

In Git, is there a way to merge all changes from one branch into another, but squash to a single commit at the same time?

I often work on a new feature in a separate branch and will regularly commit/push – mainly for backup or to transfer what I’m working on to another machine. Mostly those commits say “Feature xxx WIP” or something redundant.

Once that work is finished and I want to merge WIP branch back into master, I’d like to discard all those intermediate commits, and just a have a single clean commit.

Is there an easy way to do this?

Alternatively, how about a command that squashes all commits on a branch since the point where it was branched?

9 s
9

Another option is git merge --squash <feature branch> then finally do a git commit.

From Git merge

--squash

--no-squash

Produce the working tree and index state as if a real merge
happened (except for the merge
information), but do not actually make
a commit or move the HEAD, nor record
$GIT_DIR/MERGE_HEAD to cause the next
git commit command to create a merge
commit. This allows you to create a
single commit on top of the current
branch whose effect is the same as
merging another branch (or more in
case of an octopus).

Leave a Comment