多远程仓库下git ls-remote默认查询哪个远程的信息?
Git ls-remote 默认显示哪个远程的数据?
这个问题问得特别精准,刚好说到了git ls-remote容易被忽略的默认行为细节,我给你拆解清楚:
核心逻辑:默认目标不是固定的origin
很多人会以为git ls-remote默认查的是origin,但其实它的优先级是这样的:
- 首先看仓库的
remote.pushDefault配置项——如果这个值存在,就用它对应的远程仓库 - 如果没有设置
remote.pushDefault,就 fallback 到当前分支关联的远程仓库(也就是branch.<当前分支名>.remote配置的值)
你把原来的origin改名为origin1后,依然显示它的数据,大概率是因为:要么你的remote.pushDefault被设成了origin1,要么当前分支的关联远程就是origin1。
如何验证当前的默认目标?
你可以用这两个命令快速确认:
- 查看全局/仓库级的默认推送远程:
git config --get remote.pushDefault - 查看当前分支绑定的远程:
git config --get branch.$(git rev-parse --abbrev-ref HEAD).remote
手动指定要查询的远程
如果不想依赖默认配置,直接在命令后面加上远程名称即可,比如:
git ls-remote my-remote-1 git ls-remote my-remote-2
这样就能精准获取对应远程仓库的引用数据了。
为啥切换分支后显示的数据会变?
因为Git允许不同分支绑定不同的远程仓库(比如有的分支推送到origin1,有的推送到origin2)。当你切换分支时,branch.<分支名>.remote的值会跟着变化,git ls-remote的默认查询目标自然也就换成了当前分支绑定的远程——这就是你观察到的“切换分支后从关联远程获取数据”的原因。
内容的提问来源于stack exchange,提问作者Number945




