1. 切换分支

有的时候由于仓库比较大,为了git clone速度快点,会指定depth参数。但是仓库下载下来之后,从master切换到dev分支时,出现问题。

(base) claudius@claudius-vm:git clone git@gitee.com:ZhuiMengreal/project_b.git  --depth 1
正克隆到 'project_b'...
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (5/5), 完成.
(base) claudius@claudius-vm:git branch -vv
* master 034b992 [origin/master] m 5
(base) claudius@claudius-vm:git checkout dev
error: 路径规格 'dev' 未匹配任何 git 已知文件

 应该以下面的方式切换到dev分支:

(base) claudius@claudius-vm:$ git remote set-branches origin dev
(base) claudius@claudius-vm:$ git fetch --depth 1 origin dev
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 1), reused 0 (delta 0), pack-reused 0
展开对象中: 100% (2/2), 213 字节 | 213.00 KiB/s, 完成.
来自 gitee.com:ZhuiMengreal/project_b
 * branch            dev        -> FETCH_HEAD
 * [新分支]          dev        -> origin/dev
(base) claudius@claudius-vm:$ git checkout dev
分支 'dev' 设置为跟踪来自 'origin' 的远程分支 'dev'。
切换到一个新分支 'dev'
(base) claudius@claudius-vm:$ git branch -vv
* dev    713067b [origin/dev] dev_5
  master 034b992 m 5

2.探索原因

2.1 git clone 不指定depth参数,查看.git/config文件

(base) claudius@claudius-vm:$ git clone git@gitee.com:ZhuiMengreal/project_b.git
正克隆到 'project_b'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 22 (delta 8), reused 0 (delta 0), pack-reused 0
接收对象中: 100% (22/22), 完成.
处理 delta 中: 100% (8/8), 完成.

 config文件:注意fetch字段内容

[remote "origin"]
	url = git@gitee.com:ZhuiMengreal/project_b.git
	fetch = +refs/heads/*:refs/remotes/origin/*

2.2 git clone 指定depth参数,查看.git/config文件

git clone git@gitee.com:ZhuiMengreal/project_b.git  --depth=1

查看config文件:注意fetch字段内容

运行命令:git remote set-branches origin dev

再次查看config文件,可以发现fetch发生变化。从master变为dev分支。

2.3 git remote add 添加remote 并指定所跟踪的远程分支

 git remote add:使用-t <branch>选项,可以创建一个用于跟踪仅<branch>而不是默认的全局refs/remotes/<name>/命名空间下所有分支的refspec。可以提供多个-t <branch>以跟踪多个分支而不获取所有分支。

创建origin_m仅跟踪master分支

git remote add origin_m git@gitee.com:ZhuiMengreal/project_b.git -t master

创建origin_mv仅跟踪master分支和dev分支

git remote add origin_mv git@gitee.com:ZhuiMengreal/project_b.git -t master -t dev

 创建new 跟踪所有分支

git remote add new  git@gitee.com:ZhuiMengreal/project_b.git

看下对应的.git/config信息:

可以看得出来git set-branches改变了fetch跟踪的远程分支

总结来说,切换分支步骤如下:

1.git remote set-branches <远程URL name> <远程分支>  指定fetch时对应的远程仓库分支,会修改本地仓库的.git/config配置
2.git fetch [--depth ] <远程URL name> <远程分支>
3.git checkout 分支

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐