git push -u 是什么
推送新分支时加 -u(等同 --set-upstream),除了把分支推上去,还会记录这条本地分支跟踪哪个远端分支。建立了这层关系之后,git push、git pull、git status 都能自动对应到正确的远端,命令不必再写全远端名与分支名。
为什么值得一开始就设置
没有上游关系的分支,很多命令都要显式写出目标,容易推错地方;有了上游,git status 会直接显示领先与落后多少条提交,推送前一眼就知道会发生什么。团队协作里,这条关系也是评审平台判断「哪个分支对应哪个合并请求」的依据之一。
基本信息
| 适用平台 | Linux / macOS / Windows(Git 2.x) |
|---|---|
| 语法 | git push -u <远端> <分支> |
| 作用 | 推送并记录上游分支关系 |
| 查看关系 | git branch -vv 显示上游与领先落后数 |
| 自动设置 | push.autoSetupRemote=true 可自动建立 |
| 常见远端名 | origin,克隆时自动建立 |
典型使用场景
- 首次推送新分支:推上去同时建立跟踪,后续命令可省略参数
- 核对跟踪关系:用 branch -vv 检查每条本地分支对应哪条远端分支
- 推送前自检:确认推送目标没有指向错误的分支
- 平台协作:让评审平台能正确关联分支与合并请求
- 迁移远端:远端改名后用 -u 重新指向新位置
常用示例
常用示例
git push -u origin feature/login # 推送并建立上游关系
git branch -vv # 查看所有分支的上游与领先落后
git status -sb # 显示当前分支的跟踪状态
git push # 有了上游之后可省略参数
git branch -u origin/feature/login # 为已有分支补设上游
git config --global push.autoSetupRemote true # 自动建立跟踪有无上游的差别
| 场景 | 有上游关系 | 无上游关系 |
|---|---|---|
| git push | 推当前分支到上游 | 需要显式写远端与分支 |
| git pull | 拉取上游更新 | 需要显式指定目标 |
| git status | 显示领先落后数 | 不显示对应关系 |
| 推送目标 | 由跟踪关系决定 | 靠参数决定,容易写错 |
上线前双人复核的常见动作:用 branch -vv 一眼确认每个本地分支跟的是哪个远端分支,避免推错目标。
同名远端分支存在时容易建错跟踪关系。推送前先用 branch -vv 核对目标,建立后再用 status 复核一遍。