Merge conflict resolution
When there’s a merge conflict in Git, junk like the following is inserted into the conflicting files. Three questions:
- How do you read these annotations?
- What are some strategies to use when fixing these merge conflicts?
- Is there a GUI tool for Mac that knows how to read these files and display the two versions side-by-side to make it easier to fix the problem?
Note: In case it’s relevant, I am using GitHub’s Mac GUI client.
4 Solutions collect form web for “Merge conflict resolution”
====== comes from the
HEAD revision, which is the committed state before starting the merge operation (
git merge will complain if the tree is dirty, so it should be equivalent to your working directory).
The parts between
>>>>>> come from the version being merged. The text after the
>>>>>> is the comment of the commit that introduced the conflicting change.
That there is a conflict marker means that the base version of this part of the file is different from both “new” versions. The base version (last common ancestor) is not shown.
If you want a more comfortable merge and have a GUI available, I suggest you take a look at kdiff3.
There’s now a better solution than trying to read the gibberish markers that Git inserts into your files. Kaleidoscope 2, Black Pixel’s second release of their diff tool, is now also a merge tool. It’s not free, but it works beautifully.
After you install Kaleidoscope 2, it’s really simple to integrate with Git. Open Kaleidoscope and from the Menu Bar choose Kaleidoscope > Integration…
Then you’ll see this window. Simply choose Git from the left nav and then install the
ksdiff command-line tool and then make Kaleidoscope Git’s default diff and merge tool.
Finally, once you have a merge conflict in Git, simply go to the command line and execute
git mergetool. Now the conflict is easy to read. Enjoy.
<<<< HEAD #Where the conflict starts #Previous Revision ========== # The point where things look iffy #Things that changed >>>>> New Commit # Point where the conflict ends
Mac’s Xcode comes with FileMerge which can be accessed on the command line with
git mergetool -t opendiff
You can configure a (graphical) merge tool and use that tool to do the conflict resolution.
Also have a look at the
git mergetool command – if you have one of the pre-defined tools installed or have configured some other tool, it will open up the tool for resolution http://schacon.github.com/git/git-mergetool.html
If you are interested in GUI tools, you need not worry about what the notations really mean, as the GUI tool will help you to easily make the resolutions. Just understand that the parts marked with
>>>>> are the conflict sections.