DEV Community

Cover image for understanding difference between git merge and git rebase
Roy-Wanyoike
Roy-Wanyoike

Posted on

understanding difference between git merge and git rebase

Git merge and git rebase are two ways to integrate changes from one branch into another. Here are the differences between the two:

Git Merge:

Merges changes from one branch into another
Creates a new commit that combines the changes from the source branch and the target branch
Preserves the history of both branches
Can result in a "merge commit" that shows the point at which the two branches were merged
Does not modify the original branch
Git Rebase:

Integrates changes from one branch into another by applying them as new commits on top of the target branch
Rewrites the history of the target branch
Results in a linear history with a clear timeline of commits
Does not create a merge commit
Can cause conflicts if multiple people are working on the same branch
In general, if you want to preserve the history of both branches and create a merge commit, use git merge. If you want a linear history with a clear timeline of commits, use git rebase. However, it's important to consider the potential conflicts that may arise with rebasing, especially if you're working in a team with multiple contributors.
Here are some examples to help illustrate the differences between git merge and git rebase.

Let's say we have two branches, feature and master, and we want to integrate changes from feature into master.

Git Merge example:
git checkout master
git merge feature

This creates a new commit that combines the changes from feature and master. The resulting commit history would look something like this:

*   Merge branch 'feature' into 'master'
|\  
| * Commit D (feature)
| * Commit C (feature)
| * Commit B (feature)
|/  
* Commit A (master)

Enter fullscreen mode Exit fullscreen mode

Note the new "merge commit" that shows the point at which the two branches were merged.

Git Rebase example:

git checkout feature
git rebase master
git checkout master
git merge feature

Enter fullscreen mode Exit fullscreen mode

This applies the changes from feature as new commits on top of master. The resulting commit history would look something like this:

* Commit D' (feature)
* Commit C' (feature)
* Commit B' (feature)
* Commit A (master)

Enter fullscreen mode Exit fullscreen mode

Note that there is no merge commit and the commit history is linear, with a clear timeline of commits. However, it's important to note that if there were conflicts during the rebase process, they would need to be resolved before merging feature into master.

I hope this helps clarify the differences between git merge and git rebase!

Top comments (0)