应执行 composer update --lock 重建 lock 文件,因其按 composer.json 重算哈希与依赖,不依赖已冲突的旧 lock;手动修改或保留合并标记必致 json 解析失败、content-hash 校验不通过或运行时异常。

为什么不能手动编辑冲突的 composer.lock
Git 合并后留下的 和 <code>>>>>> origin/main 标记会让 PHP JSON 解析器直接报错:JSON decode error: Syntax error。即使你手删了这些标记,只要改了字段顺序、空行、缩进或 packages 数组顺序,content-hash 就会失效——后续 composer install 可能静默跳过校验,但运行时类找不到、方法不存在、哈希不匹配等错误就来了。
冲突发生时该运行哪条命令:用 composer update --lock
这不是“更新依赖”,而是“按当前 composer.json 重算锁文件”。它不读旧 composer.lock,只依赖 composer.json 生成全新合法快照。
- 先确保
composer.json已无冲突(git checkout --theirs composer.json或手动整合) - 删掉当前冲突的
composer.lock(或mv composer.lock composer.lock.bak) - 运行
composer update --lock—— 输出应为Lock file operations: 0 installs, 0 updates, 0 removals - 如果输出里有大量
Updating xxx,说明composer.json还没拉齐,得先git pull origin main
怎么预防频繁冲突:靠配置和流程,不是靠运气
高频冲突往往不是因为改得多,而是因为改得“不一致”。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 在
composer.json里加"config": { "sort-packages": true },再跑一次composer update --lock提交——这能消灭 70% 以上的“假冲突”(内容相同但顺序不同) - 所有依赖变更必须先改
composer.json,立刻执行composer update --lock,然后git add composer.json composer.lock一起提交 - CI 脚本里禁用
--no-lock;加校验步骤:composer validate --strict && composer install --dry-run,失败即阻断 - Git 配置
.gitattributes:写入*composer.lock -merge,避免 Git 自动合并时覆盖关键结构
composer install --no-lock 是定时炸弹
有些团队在 CI 里加 --no-lock 图省事,结果上线环境装的包和本地开发机完全不一致:安全补丁没上、间接依赖意外升级、半夜报错根本无法复现。
正确做法是 CI 始终用 composer install --no-interaction,并严格校验:composer.lock 是否与 composer.json 匹配。一旦提示 lock file is not up to date with composer.json,说明 PR 提交者漏跑了 composer update --lock,应直接拒绝合并。
真正难的不是解决冲突,而是让所有人对“谁来决定依赖版本”这件事达成共识——composer.lock 不是配置,是契约;它不接受协商,只接受重算。










