远程跟踪分支
00:00
远程跟踪分支机制:远程引用、上游分支与本地-远程同步模型。
1. 远程跟踪分支概述
1.1 什么是远程跟踪分支
远程跟踪分支是远程分支状态的本地引用,以 远程名/分支名 格式表示(如 origin/main)。它们是只读的,只在网络操作时更新。
本地分支: main ←──── HEAD
远程跟踪分支: origin/main ←── 远程仓库的 main 分支的本地缓存
1.2 引用关系
.git/refs/heads/main → 本地 main 分支
.git/refs/remotes/origin/main → 远程 origin/main 的跟踪分支
.git/refs/remotes/origin/HEAD → 远程 origin 的默认分支
2. 远程操作
2.1 fetch
# 获取远程更新(不合并)
git fetch origin
git fetch origin main
git fetch --all
# fetch 后查看远程分支
git branch -r
# origin/main
# origin/feature
# origin/develop
2.2 pull
# pull = fetch + merge
git pull origin main
# pull = fetch + rebase(推荐)
git pull --rebase origin main
# 设置默认使用 rebase
git config --global pull.rebase true
2.3 push
# 推送到远程
git push origin main
# 设置上游分支
git push -u origin feature
git push --set-upstream origin feature
# 推送所有分支
git push --all origin
# 删除远程分支
git push origin --delete feature
3. 上游分支
3.1 什么是上游分支
上游分支是本地分支关联的远程跟踪分支,设置了上游后可以简化 push/pull 命令。
# 设置上游
git branch -u origin/main main
git branch --set-upstream-to=origin/main main
# 查看上游设置
git branch -vv
# main abc1234 [origin/main] feat: add auth
# feature def5678 WIP: new feature
3.2 自动设置上游
# push 时自动设置
git push -u origin feature
# 之后可以直接
git pull
git push
4. 远程分支管理
4.1 查看远程分支
# 查看所有远程分支
git branch -r
# 查看所有分支(本地+远程)
git branch -a
# 查看远程仓库详情
git remote show origin
4.2 跟踪远程分支
# 创建本地分支跟踪远程分支
git checkout -b feature origin/feature
git checkout --track origin/feature # 同上
git checkout feature # 如果远程有同名分支,自动跟踪
4.3 清理过时的远程分支
# 清理本地已不存在的远程分支引用
git remote prune origin
# 查看将被清理的分支
git remote prune origin --dry-run
# fetch 时自动清理
git fetch -p
git fetch --prune
5. 同步模型
5.1 快进同步
本地: A---B---C
远程: A---B---C---D---E
git pull → 本地快进到 E
本地: A---B---C---D---E
5.2 非快进同步
本地: A---B---C---D
远程: A---B---C---E
git pull → 产生合并提交或 rebase
本地: A---B---C---D---M (merge)
A---B---C---D' (rebase)
5.3 三种同步策略
| 策略 | 命令 | 结果 |
|---|---|---|
| merge | git pull | 创建合并提交 |
| rebase | git pull --rebase | 线性历史 |
| fast-forward only | git pull --ff-only | 只允许快进 |
# 设置默认策略
git config --global pull.ff only