如何让 Git 自动设置上游分支(免去 --set-upstream)
git config --global push.autoSetupRemote true 让首次 push 自动建立上游跟踪,新分支直接 git push 即可。Git 2.37+ 推荐此方案;另附 push.default current 的替代配置。
一句话回答:Git 2.37 及以后版本,执行 git config --global push.autoSetupRemote true——之后新建分支第一次 git push 时会自动在远程创建同名分支并建立跟踪,再也不用手动 --set-upstream。适用于默认推送且 push.default 为 simple、upstream 或 current 的场景;目标远程仍由 remote/branch 配置决定,不一定是 origin。
推荐配置(Git ≥ 2.37)
git config --global push.autoSetupRemote true
效果:
git switch -c feature-x
git push # 若默认推送目标是 origin,则自动建立同名上游
老版本 Git 的替代方案
方案一:push.default current
git config --global push.default current
默认推送当前分支到所选远程同名分支,但不会自动建立跟踪。要让 pull/status 知道上游,可在首次执行 git push -u origin HEAD。
创建分支时的跟踪配置是另一件事:branch.autoSetupMerge 控制从已有分支创建新分支时是否跟踪起点。always 也会跟踪本地起点,可能误把 feature 的上游设为本地 main,因此不把它当作自动 push 的替代方案。
各方案对比
| 配置 | 解决什么 | 推荐度 |
|---|---|---|
push.autoSetupRemote true |
首次 push 自动建远程分支+跟踪 | ⭐ Git≥2.37 首选 |
push.default current |
push 不用写远程和分支名 | 老版本可用 |
branch.autoSetupMerge |
控制创建分支时是否跟踪起点 | 与推送时自动建上游不同 |
偶尔不想用自动行为
某次推送想推到不同名的远程分支,显式写全即可:
git push origin 本地名:远程名
常见问题(FAQ)
Q:查一下我的 Git 版本能不能用 push.autoSetupRemote?
A:git --version,2.37.0 及以上可用。低于此版本执行该 config 不会报错但也不生效,用 push.default current 代替。
Q:设置了还是不生效?
A:检查配置层级:git config --list | grep -i autosetup,仓库级配置会覆盖全局的;另外确认你用的是 git push 裸命令,显式写了 git push origin xxx 时该配置不参与。
Q:自动建的上游分支名能不一样吗?
A:不能,自动行为固定用同名分支。需要不同名时手动 git push -u origin 本地名:远程名。
核查依据
本文依据官方文档核对,示例未在实际业务环境运行;上线前请按部署版本、权限与数据范围验证。