node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org ยป


npm license Travis AppVeyor Coverage Status

npm-merge-driver(1) -- git merge driver for automatic merging of lockfiles

Automatic Setup (recommended):

To start using it right away:

$ npx npm-merge-driver install --global

Or install it locally, per-project:

$ cd /path/to/git/repository
$ npx npm-merge-driver install

...And you're good to go!

Next time your lockfile has a conflict, it will be automatically fixed. You don't need to do anything else.


$ npx npm-merge-driver install
$ git merge my-conflicting-branch
npm WARN conflict A git conflict was detected in package-lock.json. Attempting to auto-resolve.

added 1 package in 0.077s
Auto-merging package-lock.json
Merge made by the 'recursive' strategy.
 package-lock.json | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)
$ git status


The following section is only for advanced configuration of the driver if you have specific needs.

Setup Options

npm-merge-driver install supports a couple of config options:

--driver - string to install as the driver in the git configuration

--driver-name - string to use as the merge driver name in your configuration

--files - list of files that will trigger this driver

--no-legacy - disables retrying legacy commands on error

Merge Options

npm-merge-driver merge can also be configured:

-c, --command - command to execute when a lockfile is conflicted

--no-legacy - disables retrying legacy commands on error

Install as Dependency

To avoid regular npx installs, consider installing the driver:

$ npm install [-g|--save-dev] npm-merge-driver

Manual Setup (advanced):

npm-merge-driver requires two git configurations to work: a git configuration to add the driver to git, which is by default your local .git/config file, and a gitattributes(5) configuration, which is by default your local .git/info/attributes.

If you do not want npm-merge-driver to install itself for you:

Add the driver to .git/config:

$ git config merge."npm-merge-driver".name \
    "Automatically merge npm lockfiles"
$ git config merge."npm-merge-driver".driver \
    "npx npm-merge-driver merge %A %O %B %P"

Add the relevant attributes to .gitattributes or .git/info/attributes:

package-lock.json merge=npm-merge-driver
npm-shrinkwrap.json merge=npm-merge-driver

Using with other package managers

npm-merge-driver can be used with package managers other than npm! It's a bit more verbose, but works just as well, assuming the package manager has a command that can automatically resolve merge conflicts in its lockfile:

$ npx npm-merge-driver install \
    --driver-name yarn-merge-driver \
    --driver "npx npm-merge-driver merge %A %O %B %P -c yarn"
    --files yarn.lock

...and now, any time yarn.lock has a conflict, it will be automatically resolved without you having to manually run yarn.


To remove an installed merge driver, use npm-merge-driver uninstall:

$ npx npm-merge-driver uninstall [--global] [--driver-name=npm-merge-driver]


Written by Kat Marchan


Please file any relevant issues on Github.


This work is released under the terms of the ISC license. See for details.


  • git-config(1)
  • gitattributes(5)