| name | resolve-composer-conflicts |
| description | Resolve composer.lock merge conflicts when merging main into the current branch. |
Resolve composer.lock Merge Conflicts
You are resolving composer.lock merge conflicts following the Lullabot guide:
https://www.lullabot.com/articles/easy-guide-resolving-composerlock-conflicts
Step 1: Check current state
Determine if a merge is currently in progress or needs to be started.
git status
- If there's a merge in progress with conflicts, continue to Step 2.
- If there's no merge in progress, start one with
git merge main and then continue.
- If the merge completes without conflicts, inform the user and stop.
Step 2: Verify composer.lock is conflicted
Check that composer.lock is among the conflicted files. If composer.json is also conflicted, warn the user — that requires manual resolution of composer.json first before this process can work.
Step 3: Identify what composer changes this branch introduced
Run:
git diff main...HEAD -- composer.json
Note all added, removed, or changed packages. You'll need to replay these changes in Step 6.
Step 4: Accept main's composer.lock
git checkout --theirs -- composer.lock
Step 5: Resolve any other conflicted files
Check if there are other conflicted files beyond composer.lock. If so, inform the user and help resolve them before continuing.
Step 6: Replay the branch's composer changes
Based on the diff from Step 3, re-run the original composer commands to apply this branch's changes on top of main's lock file:
- For added packages:
ddev composer require <package>:<constraint>
- For removed packages:
ddev composer remove <package>
- For changed version constraints:
ddev composer require <package>:<new-constraint>
- If no composer.json changes exist on this branch:
ddev composer install
This regenerates composer.lock with the correct content-hash.
Step 7: Stage and commit
git add composer.json composer.lock
git commit
Important notes
- Never manually edit
composer.lock — always let Composer regenerate it.
- If
composer.json itself has conflicts, those must be resolved manually first.
- Always re-run the original composer commands rather than using
composer update broadly, to avoid unintended dependency changes.