We (as in not me for once) are having a bad experience with massive amounts of merge
conflicts. Git is great but there is only so much magic can get you at.
We were discussing how to limit these kind of bad experiences in IRC and I've added a
few more advices I could think of.
Try to separate your stylistic / cosmetic fixes from your actual feature commits. They are
not related to the feature, they make code review harder, they make some merges conflicts
instead of autoresolving.
Even better, try to place them before your feature commits in your commit history. You can
do that by doing an interactive rebase and shuffle lines around:
- work on some feature, commit (or stash)
- fix style and commit
- interactive rebase (git rebase -i HEAD~4 assuming 4 is how much commits you want to go
back to)
- shuffle the line so that your style commit happens before the other ones
You can even decide to apply your stylistic changes to master even if your feature is
still in the work: that will minimize conflicts if people work on related areas in
parallel as these cahnges will come quicker.
The general idea is to minimize the amount of possible conflicts in a given commit.
Squashing is a great tool but if your commit is 300 files big and has a lot of potential
conflicts, you will make enemies both during the code review and during the merge process
if it happens to conflict.
For example, I rarely rename a file AND apply changes to it int he same commit, I tend to
split those operations.
I'm not sure how merge react to conflicts but with rebase, since every commit is
replayed one by one and stops upon conflict, it's more manageable to fix them if they
are small and to the point.
Use and abuse interactive adding ie the ability to commit some of your changes. With
interactive adding, you can put in the staging area a few line change out of a file
changed in multiple areas and commit only that bit. This works great for the stylistic
changes we talked about before. The doc for interactive adding is here
http://book.git-scm.com/4_interactive_adding.html
Unfortunately the tool is command line based. GitX has a great UI to do that, so if you
are lucky to be on a Mac, go and use it. I don't know if other Linux or Windows tool
have that feature.
Disable auto import / style fixing features in your IDE.
At least make sure not to pollute commits with these kind of changes just because
you've added a line somewhere in the file. Split these in dedicated commits.
I personally run import and style fixes manually from time to time when it makes sense.
Hope that helps
Emmanuel