composer不解析changelog.md,修复是否生效取决于安装版本是否含对应commit、lock文件是否锁定正确tag、git仓库是否已打对应tag;changelog需严格对齐tag与version,仅记录已发布的可观察行为变化。

Composer 本身不发布“新特性”,也不生成或读取变更日志——所谓“Composer 新特性”实际来自其底层依赖(如 Symfony Console、clue/redis-react)或 CLI 行为调整,而 CHANGELOG.md 是人类维护的文档,必须手动对齐 Git tag 和 composer.json 中的 version 字段。
为什么 composer update 后没看到 CHANGELOG 里写的修复?
因为 Composer 完全不解析 CHANGELOG.md。你看到的修复是否生效,只取决于:当前安装的包版本是否真包含对应 commit;composer.lock 是否锁定了含该修复的 tag;本地 Git 仓库的 main 分支是否已合入 PR。常见错误包括:
- 把
CHANGELOG.md里的## [2.5.1]段落当成已发布,但实际 Git 还没打v2.5.1tag - 用
composer require vendor/pkg:dev-main测试,却在 CHANGELOG 里写了## [2.6.0]—— 这个标题根本不会被任何正式安装流程识别 - CI 脚本自动修改了
composer.json的version字段,导致 Packagist 同步后 tag 和 version 不一致,CHANGELOG.md彻底失效
如何正确同步阅读 Composer 相关包的 CHANGELOG?
关键不是“读”,而是“验证来源”。每个条目必须能回溯到具体 Git commit 或 issue 编号。操作时盯住三处:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 打开包的 GitHub/GitLab 仓库,点进
CHANGELOG.md,确认最新标题是## [x.y.z] - YYYY-MM-DD,且日期是真实发布日(不是 PR 合并日) - 点击该标题下的 PR 链接(如
Fixed crash on empty YAML (#45)),跳转后检查 PR 状态是否为 merged,且合并 commit 在对应 tag 的提交历史中 - 运行
composer show vendor/package,看输出的versions列表里是否有vX.Y.Z;再执行git -C vendor/package log -1 --format="%h %d" vX.Y.Z,确认该 tag 确实存在且指向正确 commit
哪些内容绝对不该出现在 CHANGELOG.md 里?
模糊描述、内部实现、未合入主干的计划项。这些会误导使用者判断升级价值:
- ❌ “优化性能” → ✅ “
Repository::findPackage()平均耗时从 120ms 降至 28ms(#192)” - ❌ “调整 autoload 逻辑” → ✅ “移除对
psr-0的 fallback 支持,仅保留psr-4(#201)” - ❌ “下个版本将支持 PHP 8.4” → ✅ 这类内容应写在 README 或 GitHub Discussions,CHANGELOG 只记录已发布的可观察行为变化
最常被忽略的一点:CHANGELOG 不是 release note,也不是用户手册。它只回答两个问题:“这个版本我该不该升?”和“我遇到的 bug 在不在这个版本里?”。其余所有信息,都得靠 git blame、composer show 和源码本身来验证。










