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 mergetool
for me resulted invimdiff
being 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 false
This will set
vimdiff
as the default merge tool. -
Run the following command in your terminal
git mergetool
-
You will see a
vimdiff
display 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
vimdiff
navigation 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
:wqa
save and exit from vigit commit -m "message"
git clean
Remove extra files (e.g.*.orig
) created by the diff tool.