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).
##vimdiff commands
]c : - next difference
[c : - previous difference
do - diff obtain
dp - diff put
zo - open folded text
zc - close folded text
:diffupdate - re-scan the files for differences