I've heard for instance that merging branches with git or mercurial is easier than with svn.
Reading last Joel on software blog entry, I didn't get it exactly why. Could you provide a concrete example where merging with git/mercurial lead to less merge conflicts compared to svn please?
One simple example is git can automatically convert a merge into a "fast forward". For example, let's say I have a branch that looks like this:
Master:
A ---> B ---> C
And I create a feature branch based on Master with new commits D and E.
Feature:
A --- > B ---> C
\
D ---> E
In svn, when you merge the feature branch back into master, you must create an entirely new commit that applies the changes of D and E on Master. So, it looks like:
Master:
A ---> B ---> C -----------------> F
Feature: \ /
---> D ---> E -->
In git we have a choice of how to incorporate the branch feature into master. If we do a
git rebase feature
git will automatically recognize that this is a trivial merge and perform a fast-forward merge, which will add the new commits to the master branch. The result of the rebase is:
Master:
A ---> B ---> C ---> D ---> E
Both the head of Master and Feature point at commit E (in other words, they look exactly the same). A fast-forward merge is similar to what happens when you do an update in svn.
Additionally, you have the option of forcing git to create a merge commit. If instead we do:
git merge feature
git will create a merge commit. The result of the merge is:
Master:
A ---> B ---> C -----------------> F
Feature: \ /
---> D ---> E -->
Commit F is the combination of D and E.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With