Git Merge vs. Rebase: What’s the Difference?

Both git merge and git rebase bring changes from one branch into another, but they represent project history differently. Learn what each command does, when to use it, and how to avoid rewriting commits your team already shares.

Practice Git workflows →

The short answer: merge preserves history; rebase rewrites it

A merge combines branches by creating a merge commit when needed. It preserves the original commits and records where the branches came together. A rebase replays commits from one branch on top of another, creating new commit IDs and a more linear-looking history.

How git merge works

Suppose your team has a main branch and you have finished work on feature. To merge the feature into main, switch to the destination branch and merge:

git switch main
git merge feature

If the branches have diverged, Git usually creates a merge commit with both lines of history as parents. If one branch is simply ahead of the other, Git may fast-forward instead, moving the branch pointer without creating a merge commit. In both cases, the existing commits retain their identities.

How git rebase works

To replay your feature commits on top of the latest main, switch to the feature branch and rebase it:

git switch feature
git rebase main

Git applies each feature commit again using the new base. The updated commits have new IDs, even when their changes are the same. If a conflict interrupts the rebase, resolve the files, stage them, and continue with git rebase --continue. To cancel and return to the pre-rebase state, use git rebase --abort.

Merge vs. rebase: how to choose

Use merge for shared integration

Merge is a safe default for bringing shared branches together because it does not replace existing commits. It also makes the point of integration visible in the history. Many teams use merge commits for pull requests.

Use rebase to update your own feature branch

Rebasing local work onto an updated base can make a feature branch easier to review. Once you have pushed those commits and others may depend on them, prefer merging new changes or coordinate before rewriting the branch. If you must update a published branch after a rebase, use git push --force-with-lease only when your team workflow permits it; it checks that the remote has not moved unexpectedly.

Common questions about Git merge and rebase

Is rebase better than merge?

Neither is universally better. Rebase creates a linear history by replaying commits; merge preserves branch history and integrates without rewriting it. Choose based on whether the commits are private and on your team’s conventions.

Does git rebase delete commits?

Rebase replaces the rebased commits with new commits that have different IDs. The original commits can often be recovered through Git’s reflog for a time, but do not rely on recovery as a normal workflow. Inspect your branch and working tree before rewriting history.

Learn Git Faster by Practicing

Reading is just the first step. Real learning happens when you practice.

Start Learning Git →