Why You Should Consider Using Git Rebase?
For a long time, I was telling myself how ugly those fucking merge bulks were on my git history. Then I learned about git-rebase
and how clean my history can be thanks to these command.
But recently, I was in a debate with my CTO on how consistent git-rebase
is even for the history on a uniq branch, like master
.
His point was that having a merge bulk in our history represents the reality, ie
different developers worked in parallel on the same project on the same branch at the same time. It's just a matter of graph.
My point is that using rebase does not hide this parallelism in the project
history and allows a cleaner and more linear history. It is way simpler to read,
in my point of view at least. But I do not have a real argument against the
graphical representation.
But I went through some lectures and something went in my mind. To explain it, I will shortly (re)explain what rebase
is about.
The rebase, as its noun indicates, reset the starting point of a branch and
reapplies the set of commits you are fetching. Merge conflicts are combined with these commits so they become grouped together. And that, my friends, it is a huge difference to me!
Using merge to pull in changes mixes those changes with the resolved merge conflicts. This means that the current branch won't necessarily have the same state as the one it was based on (from the hierachical structure). Since the resolved conflicts are grouped all together in one merge commit, you have also made it harder to cleanly cherry-pick individual changes.
This cherry-pick
stuff is one of the reasons you really should consider using rebase.
If you can bring me more, I would really be happy about that!
~
For more details on git rebase
and git merge
, read git merge vs git rebase: Avoiding Rebase Hell by Jarrod Spillers.
If you are still afraid of git rebase
, you should read The Magical (And Not Harmful) Rebase by Jeff Kreeftmeijer.
===
Source : http://makingthingssimpler.com/post/why-you-should-consider-using-git-rebase
Written by Adrien Giboire
Related protips
1 Response
In company we agreed to use git-up tool, that rebases changes on pull, if there are any conflicts. The --preserve-merges flag is quite important when doing git rebase, or you'll flatten your --no-ff feature merges. See: https://github.com/monterail/rules