如何检出(切换到)远程 Git 分支
检出远程分支:git fetch 后 git checkout <分支名>,本地不存在且远程跟踪分支唯一匹配时自动创建并跟踪;也可显式 git checkout --track -b <名> origin/<名>。只查看代码可用 git checkout origin/<名>。
现代 Git 直接 git checkout 分支名 就行:本地没有而已获取的远程跟踪引用恰好有唯一同名分支(或由 checkout.defaultRemote 消除歧义)时,Git 会自动创建本地分支并建立跟踪(DWIM 机制)。老版本或远程分支名与本地冲突时,用显式写法 git checkout --track -b 分支名 origin/分支名。
标准流程
git fetch # 先同步远程信息
git branch -r # 看看远程有哪些分支
git checkout feature-x # 若 origin/feature-x 是唯一匹配,则自动创建并跟踪
# 等价显式写法
git checkout --track -b feature-x origin/feature-x
# 或新语法
git switch --track -c feature-x origin/feature-x
只想看代码、不建分支
git checkout origin/feature-x
进入游离 HEAD 状态,适合临时查看、跑一下测试。
远程分支名与本地已有分支冲突
git switch -c feature-x-review origin/feature-x # 用不同名字建本地分支
常见问题(FAQ)
Q:checkout 报 "pathspec did not match"?
① 先 git fetch(远程分支信息可能过时);② git branch -r 确认分支真存在;③ 有多个 remote 时指明:git checkout --track -b 名 upstream/名。
Q:检出后 pull/push 正常吗?
DWIM 方式建的本地分支自动跟踪匹配远程的同名分支,pull 可使用上游;裸 push 还受 push.default、pushRemote、权限和保护规则影响。git branch -vv 可验证跟踪关系。
Q:有多个 remote 时自动检出会选哪个?
可猜测任意 remote 中唯一的匹配;多个匹配时可设置 checkout.defaultRemote,或显式指定 remote。窄 fetch refspec 可能未获取目标分支,需先修复获取范围。