Try:
git mergetool
It opens a GUI that steps you through each conflict, and you get to choose how to merge. Sometimes it requires a bit of hand editing afterwards, but usually it’s enough by itself. It is much better than doing the whole thing by hand certainly.
As per Josh Glover’s comment:
[This command]
doesn’t necessarily open a GUI unless you install one. Runninggit mergetoolfor me resulted invimdiffbeing used. You can install
one of the following tools to use it instead:meld,opendiff,
kdiff3,tkdiff,xxdiff,tortoisemerge,gvimdiff,diffuse,
ecmerge,p4merge,araxis,vimdiff,emerge.
Below is a sample procedure using vimdiff to resolve merge conflicts, based on this link.
-
Run the following commands in your terminal
git config merge.tool vimdiff git config merge.conflictstyle diff3 git config mergetool.prompt falseThis will set
vimdiffas the default merge tool. -
Run the following command in your terminal
git mergetool -
You will see a
vimdiffdisplay in the following format:╔═══════╦══════╦════════╗ ║ ║ ║ ║ ║ LOCAL ║ BASE ║ REMOTE ║ ║ ║ ║ ║ ╠═══════╩══════╩════════╣ ║ ║ ║ MERGED ║ ║ ║ ╚═══════════════════════╝These 4 views are
- LOCAL: this is the file from the current branch
- BASE: the common ancestor, how this file looked before both changes
- REMOTE: the file you are merging into your branch
- MERGED: the merge result; this is what gets saved in the merge commit and used in the future
You can navigate among these views using ctrl+w. You can directly reach the MERGED view using ctrl+w followed by j.
More information about
vimdiffnavigation is here and here. -
You can edit the MERGED view like this:
-
If you want to get changes from REMOTE
:diffg RE -
If you want to get changes from BASE
:diffg BA -
If you want to get changes from LOCAL
:diffg LO
-
-
Save, Exit, Commit, and Clean up
:wqasave and exit from vigit commit -m "message"git cleanRemove extra files (e.g.*.orig) created by the diff tool.