Resolving merge conflicts in git bash - some tips
Visual Studio’s libgit2 integration is really slow on my work PC, so when I need to bulk-resolve some merge conflicts, git bash is faster.
These are some tips for a limited set of situations…
Deleted by them
I had gitignored
and git rm
‘d some generated XML files, and that change got merged to main
. When merging back to another feature branch, it looks like:
Unmerged paths:
(use "git add/rm <file>..." as appropriate to mark resolution)
deleted by them: Src/ACME.Business/App_Data/ACME.Business.xml
deleted by them: Src/ACME.Public.DocumentService/App_Data/ACME.Business.xml
(+ 4 more)
The tip given by git here is right; use git rm
… but we can make it faster with a wildcard to match multiple files:
git rm *.Business.xml
That will “accept the delete” and remove those files from the conflict list.
Both modified - keep ours/theirs
File modified on both sides, but you just want to keep your whole file or theirs?
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: Src/ACME.Core/Properties/AssemblyVersion.cs
Use git checkout --theirs <file>
on a pathspec to keep theirs during a merge. Does what it says on the 🥫!
Likewise to keep yours, use --ours
(apparently you could also use git checkout HEAD <file>
)
You have to git add
the change afterwards, or it continues to show as “both modified”.
Anything else
For line-by-line changes, you will need to use a text editor. GitHub have some general advice on resolving a merge conflict using the command line which is a shallow overview. Use your editor’s features! 🕵️♀️
Đây là ngày cuối cùng làm viẹc của anh, năm nay. Chúc mừng giáng sinh! 🎄⛪