Merge is a common operation in Git to merge the changes in another branch to the current branch.
Here is an example, where we checkout the
master branch and merge a
feature_branch to it:
$ git checkout master $ git merge feature_branch $ git commit
In the pictorial depictions above we can see that the two branches are actually merged together in the directed acyclic graph (DAG) with an edge. After this, the
git log for
master will show all the commits that are in
feature_branch too in addition to the commits in
There might be cases where you do not want to actually merge the two branches. Maybe you just want a single commit on
master that has all the changes that would have been merged from
feature_branch. Note that this is different from
git rebase since that replays all the multiple commits of
The answer to this is
git merge --squash. This command effectively changes the files such that they would be after a
git merge. However, there would be no link between
feature_branch after this commit is committed.
To merge with squash in the above scenario:
$ git checkout master $ git merge --squash feature_branch $ git commit
When you commit you will see that Git inserts a default commit message that says
Squashed commit of the following and lists all the commits from
feature_branch that are squashed into this commit. You can delete this commit message and create your own of course.
The pictorial depiction of this operation above shows that there is no link between the two branches after this merge. When you do
git log no one can see the multiple commits of
feature_branch. You can even safely delete
feature_branch if you want to after this operation.
Tried with: Git 2.9.0 and Ubuntu 16.04