In the middle file (future merged file), you can navigate between conflicts with ]c
and [c
.
Choose which version you want to keep with :diffget //2
or :diffget //3
(the //2
and //3
are unique identifiers for the target/master copy and the merge/branch copy file names).
:diffupdate (to remove leftover spacing issues)
:only (once you’re done reviewing all conflicts, this shows only the middle/merged file)
:wq (save and quit)
git add .
git commit -m “Merge resolved”
If you were trying to do a git pull
when you ran into merge conflicts, type git rebase –continue
.
_________________
|LOCAL|BASE|REMOTE|
|-----------------|
|_____MERGED______|
- (left)
LOCAL
– this is file from the current branch - (mid)
BASE
– common ancestor, how file looked before both changes - (right)
REMOTE
– file you are merging into your branch - (bottom)
MERGED
– merge result, this is what gets saved in the repo
Let’s assume that we want to keep the change from REMOTE
. For that, move to the MERGED
file (Ctrl + w, j), move your cursor to a merge conflict area and then:
:diffget RE
This gets the corresponding change from REMOTE
and puts it in MERGED
file. You can also:
:diffg RE " get from REMOTE
:diffg BA " get from BASE
:diffg LO " get from LOCAL
Save the file and quit (a fast way to write and quit multiple files is :wqa).
]c :
: next difference[c :
: previous differencedo
: diff obtaindp
: diff putzo
: open folded textzc
: close folded text:diffupdate
: re-scan the files for differences