直接在require中写分支别名即可,如"dev-main";需确保分支名与远程仓库完全一致且未被设为稳定分支,否则会报错。

直接用 composer require 指定分支名即可
Composer 本身不区分“安装分支”和“安装版本”,它只认 composer.json 中的 version 字段或 VCS 仓库的解析结果。所谓“安装 dev-master”,本质是让 Composer 把 dev-master 当作一个开发版别名去拉取最新 commit。实际执行时,它会走 Git,不是下载 tag。
-
dev-master是最常用的开发分支别名,但前提是目标包的composer.json所在仓库有master(或main)分支,且该分支未被设为“稳定分支” - 如果远程主分支叫
main,而你写"dev-master",Composer 会报错:Could not find a matching version of package xxx. Check the package spelling, your version constraint and that the package is available in a stability which matches your minimum-stability - 要支持
dev-main,需确保该包的composer.json里没设置"branch-alias": {"dev-master": "1.0.x-dev"}这类旧映射,否则dev-main可能不被识别
怎么写 composer.json 依赖项才能拉指定分支
在项目根目录的 composer.json 的 require 段里,直接把版本号写成分支别名即可,不需要加 git+ 或其他前缀(除非是私有仓库):
{
"require": {
"monolog/monolog": "dev-main",
"laravel/framework": "dev-develop",
"vendor/package": "dev-feature/auth-module"
}
}
注意:
- 分支名必须完全匹配远程 Git 仓库的实际分支名(大小写敏感)
- 如果分支名含斜杠(如
feature/login),Composer 默认允许,但某些旧版( - 运行
composer install或composer update vendor/package后,Composer 会在vendor/vendor/package下生成composer.lock记录具体 commit hash,而非分支名——这意味着下次composer install会复现同一代码,即使分支后续有新提交
强制刷新分支最新代码(绕过 lock 文件缓存)
默认情况下,composer update 不会自动拉取分支新 commit,因为 composer.lock 锁定了 commit hash。要更新到分支 HEAD,必须显式触发更新:
- 运行
composer update vendor/package --with-dependencies,它会重新走 Git fetch 并检出该分支最新 commit - 或者删掉
vendor/package目录 + 对应 lock 条目,再composer install - 若只想看当前装的是哪个 commit,执行
composer show -s vendor/package,输出里会有source行显示type: git、url和reference(即 commit id)
dev-master 与具体分支(如 dev-v2)的稳定性差异
Composer 的 minimum-stability 配置会影响能否成功 require 分支:
- 默认
"minimum-stability": "stable"时,dev-*类型全部被拒绝,必须显式声明"prefer-stable": false或在 require 行末尾加@dev后缀(如"dev-master@dev") - 更稳妥的做法是在根
composer.json里设:"minimum-stability": "dev",否则哪怕写了dev-main,也会因稳定性不足被跳过 - 分支名本身不带稳定性语义,
dev-v2和dev-master在 Composer 眼里都是dev级别,区别仅在于指向哪条 Git 分支
真正容易被忽略的是:一旦用了分支依赖,CI 构建或团队协作中就失去了版本可重现性保障——除非你接受每次 composer update 都可能拉到不同代码。生产环境应尽量避免,测试/开发阶段才适用。










