Understanding git rebase is confusing when you start working with it. Here's how I understand Git Rebase.
What is Rebase
Git Merge and Git Rebase does the same thing - both can pull changes from other branches. But Rebase works little different from Merge.
ELI5 version
Git Rebase
You are about to travel for few days so you start packing bags. You put your t-shirts, charger, headphones, toothbrush etc. Your friend is about to come at your place to drop you at railway station. Your friend bought a gift for you - a new shiny jeans. You want to put the jeans below all of your cloths therefore you pull all your cloths from bag/suitcase, put jeans and put back your cloths. This is basically rebase.
- items in bag is your feature branch
- new blue jeans is your master branch
- when you reshuffle cloths to put new jeans below other cloths is git rebase
Git Rebase Vs Git Merge
- in
git rebase
you add more cloths to your base as you receive them. so it is properly organized and easy to pull cloths, easy to manage.- in
git merge
you are lazy - you put that jeans and any other item on top of your bag as you receive them. This is hard to pull specific things when you need them, results merge conflicts often complex one and overall hard to manage.
How Rebase works
Let's say you create a new branch
feature/contact-us-page
frommaster
branch. While you are working on your feature the master branch gets updated with new features.Consider following history of feature and master branch
feature/contact-us-page master commit 102 commit 106 Merge branch home-page commit 101 commit 105 Merge branch about-us-page commit 100 commit 104 Merge branch login-page When you run
git rebase master
on your branch, it pulls changes from master and move them below your current branch changes. Here's how your feature branch commit will look
feature/contact-us-page master commit 102 commit 106 Merge branch home-page commit 101 commit 105 Merge branch about-us-page commit 100 commit 104 Merge branch login-page commit 106 Merge branch home-page commit 105 Merge branch about-us-page commit 104 Merge branch login-page Master branch history when you merge your branch into master using merge strategy
master commit 102 commit 101 commit 100 commit 106 Merge branch home-page commit 105 Merge branch about-us-page commit 104 Merge branch login-page
VS how Merge works
When you run
git merge master
on your branch, it pulls changes from master and move them into a new commit. This new commit is on top of your changes. Here's how your feature branch commit will look after git merge -
feature/contact-us-page master commit 107 Merge branch master commit 102 commit 106 Merge branch home-page commit 101 commit 105 Merge branch about-us-page commit 100 commit 104 Merge branch login-page Important thing to note here is
commit 106 feature/home-page
,commit 105 feature/about-us-page
andcommit 104 feature/login-page
are still present incommit 107 merge commit
.Master branch history when you merge your branch into master using merge strategy
master commit 107 Merge branch master commit 106 Merge branch home-page commit 105 Merge branch about-us-page commit 104 Merge branch login-page
Rules for Rebasing
- When not to do Rebase - Always rebase on your own branch. Never use it on public branches
- Force Push with Caution - When you rebase, git pulls latest changes and move it below your changes. It basically rewrites your history. To push changes to origin you need to do force push -
git push --force
. Please be very careful, if you push on some other branch, it will rewrite history of that branch and there is no way to revert it.
Benefits of Rebasing over Merge
- You will get much cleaner history
- Reverting changes or whole branch is a lot easier because you are always dealing with simple commits. In Merge you deal with merge commits which has other commits.
- You won't get bigger merge conflicts
Top comments (0)