深入远程分支
本教程共 26 篇 · 第 13 篇 · 更新于 2026-07-29 · 约 7 分钟阅读
13. 深入远程分支
本节目标:理解远程跟踪分支的本质,掌握 push -u 建立跟踪关系的方法,能读懂 git branch -vv 的输出判断领先/落后状态。
上一章学了远程仓库的基本操作。这一章深入一层:本地看到的 origin/main 到底是什么?它和远程怎么联动?
远程跟踪分支是什么
origin/main 不是真正的远程分支,而是本地的一个”快照指针”。它记录你最后一次和 origin 通信时,远程 main 分支的位置。
它有几个特点:
- 名字格式:
远程名/分支名。 - 你不能直接在上面提交。
- 每次
git fetch或git pull后它才会更新。 - 它像书签,标记远程分支”上次看到的位置”。
克隆之后自动建立的关系
git clone https://github.com/user/repo.git
cd repo
git branch -a
输出:
* main # 本地分支
remotes/origin/main # 远程跟踪分支
Git 自动做了三件事:
- 创建本地
main分支。 - 创建
origin/main指向远程 main 的位置。 - 让本地
main跟踪origin/main。
所以 clone 完直接 git pull、git push 就能用,不用指定远程和分支。
跟踪分支(Upstream Branch)
跟踪分支就是”和某个远程分支绑定的本地分支”。好处:
git pull不用指定远程和分支。git push不用指定远程和分支。git status会告诉你”领先几个、落后几个提交”。
On branch main
Your branch is ahead of 'origin/main' by 2 commits.
(use "git push" to publish your local commits)
建立跟踪关系的几种方式
1. push -u(最常用)
第一次推送本地新分支时,加 -u:
git push -u origin feature
-u 是 --set-upstream 的简写。Git 会做两件事:把分支推送到远程,并在本地建立跟踪关系。
之后直接 git push、git pull 就行。
2. checkout —track
从远程跟踪分支创建本地分支时,自动建立跟踪:
git checkout --track origin/feature
更短的简写:只要本地没有同名分支,Git 会自动推断:
git checkout feature
输出:
Branch feature set up to track remote branch feature from origin.
Switched to a branch 'feature'
3. branch -u 显式设置
已有本地分支,想改它的上游:
git branch -u origin/main
或者切到某个分支后:
git switch main
git branch -u origin/main
查看跟踪关系
git branch -vv 是诊断同步状态的利器:
feature a1b2c3d [origin/feature] 修复登录
* main d4e5f6g [origin/main: ahead 2] 更新文档
staging h7i8j9k [origin/staging: behind 1, ahead 3] 新接口
解读:
main领先远程 2 个提交(本地有 2 个没推)。staging领先 3 个、落后 1 个(远程有人推了 1 个,本地有 3 个没推)。feature和远程同步。
Note这些数字是本地缓存的数据,不是实时状态。想获取最新数字,先
git fetch --all。
git remote show:远程仓库的体检报告
git remote show origin 的输出格式和字段含义如 §12 所述。这里重点补充第 13 章的解读视角:
- 哪些远程分支已经失效(被队友删了)——这是清理信号。
- 每个本地分支 push/pull 时会对应到哪个远程分支——这是跟踪关系的诊断依据。
清理失效的远程跟踪分支
队友删了远程分支,本地的 origin/xxx 不会自动消失。时间一长,一堆死指针。
git remote prune origin
或者 fetch 时自动清理:
git fetch --prune
想看看哪些会被删(演习模式):
git remote prune --dry-run origin
推送时本地和远程分支名不同
git push origin local-name:remote-name
比如本地叫 fix,想推到远程叫 hotfix:
git push origin fix:hotfix
删除远程分支
删除远程分支的方法如 §12 所述,有两种写法:
git push origin --delete feature
git push origin :feature
第二种是旧语法,含义是”推一个空值过去”。
实战场景:多人协作的一天
- 早上开工,先同步远程状态:
git fetch --all
- 看看同事有没有新提交:
git log --oneline origin/main
- 切到 main,拉最新代码:
git switch main
git pull
- 切到自己的功能分支,把 main 最新代码合进来:
git switch feature
git merge main
- 开发完成,推送并建立跟踪:
git push -u origin feature
- 想看看整体状态:
git branch -vv
本章小卡片
| 命令 | 作用 |
|---|---|
git push -u origin <分支> | 推送并建立跟踪 |
git checkout --track origin/<分支> | 创建本地分支并跟踪 |
git branch -u origin/<分支> | 设置当前分支的上游 |
git branch -vv | 查看本地分支及跟踪状态 |
git remote show origin | 查看远程仓库详情 |
git fetch --prune | 抓取并清理失效远程分支 |
git remote prune origin | 清理失效远程跟踪分支 |
Tip每次 fetch 后跑一遍
git branch -vv,心里清楚哪些分支该推、哪些该拉、哪些已经过期。