git branch -vv 是查看所有本地分支 upstream 信息的最直接方式,显示跟踪的远程分支及提交偏移状态,方括号为空表示未设置 upstream,且 remote 名(如 origin/upstream)依实际配置而定。

git branch -vv 能直接看到所有本地分支的 upstream 信息
这是最直接、无需额外配置的方式。git branch -vv 会列出所有本地分支,并在括号里显示其跟踪的远程分支(即 upstream),以及本地与远程的提交偏移状态。比如:
main [origin/main] Merge pull request #123 * dev [origin/dev] Add user auth logic feature/x [upstream/feature-x] WIP on search filter
注意:[origin/dev] 中的 origin/dev 就是当前分支 dev 的 upstream 分支;方括号为空(如 dev [])表示未设置 upstream。
常见误区:只用 git branch(不带 -v)看不到 upstream,必须加 -v 或 -vv。
VSCode 内置 Git 视图默认不显示 upstream,需靠命令补全
VSCode 左侧 Git 面板只显示本地分支名和图标,不展示远程跟踪关系。它依赖底层 Git 的配置来切换推送/拉取目标,但不渲染 upstream 字符串。
如果你希望在 VSCode 界面中“一眼看出”关联关系,只能:
- 右键某个分支 → 选择 Copy Branch Name,然后手动在终端运行
git config --get branch.<branch-name>.merge和git config --get branch.<branch-name>.remote - 或更简单:打开 VSCode 集成终端,直接执行
git branch -vv
别指望点击几下就能在 UI 里查到——这不是 VSCode 的设计逻辑,它把这类元信息交给 Git 命令层处理。
上游分支没设置?git branch --set-upstream-to 是唯一可靠写法
新分支默认没有 upstream,除非你用 git checkout -b foo origin/foo 或 git switch -c foo --track origin/foo 创建。如果漏了,就会出现 git push 报错:fatal: The current branch xxx has no upstream branch.
修复方式只有这一种标准写法(Git 2.0+):
git branch --set-upstream-to=origin/dev dev
注意:--set-upstream 已废弃,不要用;origin/dev 必须存在且可访问;目标分支名(dev)可以省略,若当前就在该分支上。
设完再跑一遍 git branch -vv 就能确认是否生效。
远程名(remote name)不是固定的,origin 可能是 upstream 或 fork
upstream 分支的完整标识是 <remote-name>/<branch-name>,而 remote-name 完全由你自己定义。很多人以为一定是 origin,其实:
- 你 fork 项目后添加原仓库为远程,常命名为
upstream:git remote add upstream https://github.com/original/repo.git - 此时你的
main分支 upstream 很可能是upstream/main,而非origin/main -
git branch -vv显示的正是这个真实 remote 名,不会自动映射或猜测
所以看到 [upstream/main] 别慌,说明你确实配置对了——只是 remote 名不是 origin 而已。
真正容易被忽略的是:upstream 关系是分支粒度的,不是仓库全局的。一个 repo 可以有多个 remote,每个本地分支可以各自指向不同 remote 的不同分支,git branch -vv 是唯一能一次性看清全部映射的地方。


















