Git merge combines the histories of two branches by creating a new commit, preserving both branches’ history. Git rebase, on the other hand, moves the entire branch to begin on the tip of another branch, rewriting the commit history. You might prefer rebase for a cleaner project history and merge when preserving the context of the development is important.
In depth
Git merge is a non-destructive operation that combines two branch histories together, creating a new commit that keeps the original context intact. This is particularly useful in a collaborative environment where understanding the flow of development and when changes were made is valuable. A merge commit helps communicate how features or fixes were integrated over time. Conversely, git rebase rewrites commit history by taking changes from one branch and applying them directly on top of another branch. This creates a linear history, which can make the project history easier to read but at the risk of obscuring the original context of commits.
In practice, a team may prefer to use rebase when they want to keep the commit history linear and clean, especially for small, feature-specific branches that do not diverge far from the main branch. However, it is crucial to remember that rebasing can lead to conflicts if there are overlapping changes, and it should never be used on shared branches, as it rewrites history that others have already based their work on.
Example scenario
In a recent project, our team was developing a new feature in a separate branch. After completing the feature, we chose to rebase our branch onto the latest version of the main branch before merging. This allowed us to resolve conflicts in a simplified linear structure and keep the commit history clean without merge commits. The rebased feature branch was then merged, and our project's commit log reflected a clear timeline of changes, making it easier for new developers to onboard and understand the progression of development.
Common mistakes
One common mistake is using git rebase on shared branches; this can disrupt the workflow of other developers who have based their changes on that branch, leading to significant confusion and potential loss of work. Another mistake is failing to resolve conflicts correctly during rebase, resulting in a commit history that may not function as intended. Developers sometimes overlook the importance of preserving historical context, leading to a linear history that may not accurately reflect the timeline of project decisions.
Follow-up questions
- What are some strategies for resolving conflicts during a rebase?
- Can you describe a situation where a merge might be more beneficial than a rebase?
- How do you ensure that your local branch is up to date before performing a rebase or a merge?
- What command would you use to check the commit history after a rebase?

Want all 2,000 questions in one PDF?
- Short answers, in-depth explanations, common mistakes and follow-ups
- 89 topics, from Beginner to Architect, with a clickable contents list
- 226 extra questions that are not on this website
- Free Bonus Pack: 30-day study plan, behavioral questions, salary scripts
Includes 226 extra questions that are not on this site, plus a free Bonus Pack.
Get both books for $9.99 (save $2.99):
The material stays free to read online. This is the organised, offline, print-ready PDF edition. Secure payment by PayPal; your personal download link is emailed after payment is confirmed. Digital product, no shipping.