首页 / Git 入门教程 / 深入远程分支

Git 入门教程

深入远程分支

本教程共 26 篇 · 第 13 篇 · 更新于 2026-07-29 · 约 7 分钟阅读

GitGit 入门教程远程分支远程跟踪分支origin/maingit push -u跟踪分支

13. 深入远程分支

本节目标:理解远程跟踪分支的本质,掌握 push -u 建立跟踪关系的方法,能读懂 git branch -vv 的输出判断领先/落后状态。

上一章学了远程仓库的基本操作。这一章深入一层:本地看到的 origin/main 到底是什么?它和远程怎么联动?

远程跟踪分支是什么

origin/main 不是真正的远程分支,而是本地的一个”快照指针”。它记录你最后一次和 origin 通信时,远程 main 分支的位置。

它有几个特点:

  • 名字格式:远程名/分支名
  • 你不能直接在上面提交。
  • 每次 git fetchgit pull 后它才会更新。
  • 它像书签,标记远程分支”上次看到的位置”。

克隆之后自动建立的关系

git clone https://github.com/user/repo.git
cd repo
git branch -a

输出:

* main                # 本地分支
  remotes/origin/main # 远程跟踪分支

Git 自动做了三件事:

  1. 创建本地 main 分支。
  2. 创建 origin/main 指向远程 main 的位置。
  3. 让本地 main 跟踪 origin/main

所以 clone 完直接 git pullgit 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 pushgit 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

第二种是旧语法,含义是”推一个空值过去”。

实战场景:多人协作的一天

  1. 早上开工,先同步远程状态:
git fetch --all
  1. 看看同事有没有新提交:
git log --oneline origin/main
  1. 切到 main,拉最新代码:
git switch main
git pull
  1. 切到自己的功能分支,把 main 最新代码合进来:
git switch feature
git merge main
  1. 开发完成,推送并建立跟踪:
git push -u origin feature
  1. 想看看整体状态:
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,心里清楚哪些分支该推、哪些该拉、哪些已经过期。