git merge vs git rebase
Compare preserving branch history with rewriting commits into a cleaner linear history.
Architecture
git merge
git merge combines histories from different branches and usually creates a merge commit. It preserves the real branching structure and shared commit history.
Architecture
git rebase
git rebase rewrites commits so they appear on top of a new base. It creates a cleaner, more linear history but changes commit hashes and rewrites history.
Key Differences
git merge preserves branch history, while git rebase rewrites commit history onto a new base.
Merge usually creates a merge commit, while rebase avoids that by replaying commits linearly.
Rebase often creates a cleaner history, while merge preserves a more accurate view of how work actually happened.
Merge is safer for shared branches because it does not rewrite published history.
Rebase is often useful on local branches before merge, but dangerous when used carelessly on branches others already depend on.
The tradeoff is usually readability and linearity versus safety and historical accuracy.
When to Use
When to use git merge
Use git merge when you want to preserve exact branch history and avoid rewriting commits that may already be shared with teammates.
When to use git rebase
Use git rebase when you want a cleaner linear commit history and are working on local or carefully controlled branches where rewriting history is acceptable.
Tradeoffs
Merge is safer and history-preserving, but can produce a noisier commit graph.
Rebase creates a cleaner timeline, but increases the risk of confusion if used on shared branches.
Teams often choose based on collaboration style, review preferences, and tolerance for history rewriting.
Common Mistakes
Rebasing shared branches that other developers already depend on.
Thinking rebase is always better simply because history looks cleaner.
Using merge blindly without understanding how it affects history readability.
Interview Tip
The standard answer is: merge preserves history, rebase rewrites history to produce a cleaner linear timeline.