Better conflict resolution with Mergiraf
Using Mergiraf for conflict resolution
Mergiraf is a driver for git conflict resolution that is syntax aware. Meaning Mergiraf implements conflict resolution on top of a syntax tree representation (powered by tree-sitter) instead of being only line based like the default Git driver.
To use it, install the binary and follow the usage guide, a basic Git config setup.
[merge]
conflictStyle = "diff3"
[merge "mergiraf"]
name = mergiraf
driver = mergiraf merge --git %O %A %B -s %S -x %X -y %Y -p %P -l %L
Then in ~/.config/git/attributes:
* merge=mergiraf
Using pnpm’s merge driver for pnpm-lock.yaml conflicts
One small improvement is to use a different driver for lock files as those are a bad fit for Mergiraf.
Improve on the configuration by either:
- Using the default Git conflict resolution on pnpm-lock files, and on conflict run
pnpm install(can automatically resolve the conflict):
* merge=mergiraf
pnpm-lock.yaml merge=git
Or use pnpm’s dedicated merge driver:
* merge=mergiraf
pnpm-lock.yaml merge=pnpm-lock
And then install the conflict solver, for example:
pnpm add -g @pnpm/merge-driver
pnpm dlx npm-merge-driver install \
--driver-name pnpm-lock \
--driver "pnpm-merge-driver %A %O %B %P" \
--files pnpm-lock.yaml
Then Mergiraf will run on most files and pnpm merge driver on pnpm-lock.yaml.
On a final note, I highly recommend https://blog.gitbutler.com/how-git-core-devs-configure-git for a primer on recommended Git config options/better Git defaults.