git 浅克隆之后如何切换分支

当你使用 git clone --depth 1 进行浅克隆时,Git 默认只会追踪远程的默认分支(通常是 mainmaster),并且不会获取其他分支的信息。

要切换到其他远程分支,可以根据你的需求选择以下几种方法:

方法一:只获取某一个特定的分支(推荐)

如果你只需要切换到某一个特定的分支,而不想下载所有分支,这是最快的方法:

  1. 添加远程分支到追踪列表:
    1
    git remote set-branches origin <分支名>
  2. 获取该分支的数据(依然保持浅层):
    1
    git fetch --depth 1 origin <分支名>
  3. 切换到该分支:
    1
    git checkout <分支名>

方法二:获取远程所有分支(依然保持浅层)

如果你想看到远程所有的分支列表,并能随意切换,但依然不想下载完整的历史记录:

  1. 修改远程配置以追踪所有分支:
    1
    git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
  2. 获取所有分支的数据:
    1
    git fetch --depth 1
  3. 现在你可以像平常一样切换分支了:
    1
    git checkout <分支名>

方法三:直接一键拉取远程特定分支(最简单)

如果你知道分支名,可以直接用 fetch 命令拉取:

1
2
git fetch --depth 1 origin <远程分支名>:<本地分支名>
git checkout <本地分支名>

方法四:彻底变成“深”克隆(不推荐,除非需要完整历史)

如果你发现浅克隆太受限,想要找回所有的历史记录和分支:

1
git fetch --unshallow

注意:这会下载整个项目的所有提交历史,耗时可能较长。

总结

最常用的步骤:

1
2
3
4
# 假设你想切换到远程的 dev 分支
git remote set-branches origin dev
git fetch --depth 1 origin dev
git checkout dev

如何检查当前追踪了哪些分支?
你可以运行以下命令查看配置:

1
git config --get remote.origin.fetch

如果输出是 +refs/heads/main:refs/remotes/origin/main,说明只追踪了 main。
如果输出是 +refs/heads/*:refs/remotes/origin/*,说明追踪了所有分支。