Git 是我们开发过程中经常使用到的版本管理工具,在平常情况下我们从远程克隆的时候会将整个库克隆下来,这会包括整个版本库的历史提交记录和远程库里的所有分支。但在一些情况下,比如我们并不需要查看历史提交记录而只是希望能够获取到最新的代码;或者我们只希望克隆某个指定分支时,而不是克隆全部的远程分支,此时我们就可以用到一些选项来减少我们的仓库的体积从而提高生产效率。

指定远程分支克隆的好处;

  1. 减少仓库下载体积,提高代码仓库下载速度
    a. 在没有需要查看历史提交的情况下,使用浅克隆模式只克隆最新一次的提交内容:
    git clone --depth 1 -b master git@www.gitee.com/ghimi/hello.git
    b. 在远程仓库分支比较多的情况下,只克隆远程仓库的指定分支和其上的全部提交记录:
    git clone --single-branch -b master git@www.gitee.com/ghimi/hello.git

通过-b branch_name 选项Git 克隆指定分支

当我们没有通过 -b 选项指定分支时,Git 会默认会在本地创建一个 master/main分支并关联到远程的主干分支上,但如果我们希望创建的本地分支关联的不是主干分支时,我们就可以通过-b 选项来指定我们追踪的远程分支名称如:

# 指定克隆远程分支 `/develop/branch_1## 标题`
> git clone -b /develop/branch_1 git@www.gitee.com/ghimi/hello.git

-b选项搭配 --single-branch 选项只克隆指定分支

通过这种方式克隆远程仓库除了指定的远程分支不是主干分支以外,还是会将远程的所有分支都拉取下来,并不能够起到减小克隆仓库体积的功能。

# 指定克隆远程分支 `/develop/branch_1`
> git clone -b /develop/branch_1 git@www.gitee.com/ghimi/hello.git
> cd hello
# 进入仓库,通过 git branch -r 查看可以看到还是拉取到了全部远程分支
> git branch -r
origin/20200113-function-concurrency-test
origin/20210112_8457548_basic2
origin/HEAD -> origin/master
origin/acl_retrofit
origin/add_api_for_get_organizations

如果想要只克隆指定分支还需要搭配 --single-branch 选项,这样我们就只会拉取到我们指定的分支,而不会拉取到其他远程分支了

# 指定克隆远程分支 `/develop/branch_1`
> git clone -b /develop/branch_1 --single-branch git@www.gitee.com/ghimi/hello
> cd hello
# 进入仓库,通过 git branch -r 当前就只剩下一个分支了
> git branch -r
/origin/develop/branch_1

通过 --depth <depth> 选项指定历史记录的深度

在一些情况下导致仓库体积过大的原因并不是分支太多,而是单个分支下的提交记录过多,我们在一些情况下只想查看分支的最新提交的代码,此时我们可以--depth 1 实现浅克隆,此时我们拉取的代码就是最新一次提交后的代码快照。

# 指定克隆远程分支 `/develop/branch_1`
> git clone -b /develop/branch_1 --depth 1 git@www.gitee.com/ghimi/hello
> cd hello
# 进入仓库,通过 git branch -r 当前只有一个分支了
> git branch -r
/origin/develop/branch_1
# 通过 git log 查看历史提交记录,发现只剩下最后一次的提交记录,而无法看到历史的提交记录
> git log
commit 75bdec69e39ea85fcdc750ef289ece7e76d2b79c (grafted, HEAD -> develop/branch_1, origin/develop/branch_1)
Author: ghimi
Date:   Fri Mar 3 15:01:36 2023 +0800
Merge commit 'fc3fe2a0002fc394696ec131797038707f5f4864' into /develop/branch_2

在指定了 --depth 选项后,就无需再指定 --single-branch 选项了。因为浅克隆模式默认隐含了 --single-branch 选项,如果想要在 --depth 选项的基础上还拉取其他分支的代码,可以通过添加 --no-single-branch 选项,此时会拉取到全部远程分支的对应的最近一次的提交记录。

# 指定克隆远程分支 `/develop/branch_1`
> git clone -b /develop/branch_1 --depth 1 --no-single-branch git@www.gitee.com/ghimi/hello.git
> cd hello
# 进入仓库,通过 git branch -r 可以看到拉取到了全部远程分支
> git branch -r
origin/develop/branch_1
origin/20200113-function-concurrency-test
origin/20210112_8457548_basic2
origin/HEAD -> origin/master
origin/acl_retrofit
origin/add_api_for_get_organizations
# 通过 git log 查看历史提交记录,发现只剩下最后一次的提交记录,而无法看到历史的提交记录
> git log
commit 75bdec69e39ea85fcdc750ef289ece7e76d2b79c (grafted, HEAD -> develop/branch_1, origin/develop/branch_1)
Author: ghimi
Date:   Fri Mar 3 15:01:36 2023 +0800
Merge commit 'fc3fe2a0002fc394696ec131797038707f5f4864' into /develop/branch_2

通过 git fetch --unshallow 恢复全部的历史提交记录

我们在使用 --depth 1 查看到了当前代码后,如果想要追溯代码的历史提交记录时,可以用 git fetch --unshallow 命令重新拉取指定远程分支的全部历史记录。

# 指定克隆远程分支 `/develop/branch_1`
> git clone -b /develop/branch_1 --depth 1 git@www.gitee.com/ghimi/hello
> cd hello
# 进入仓库,通过 git branch -r 当前只有一个分支了
> git branch -r
/origin/develop/branch_1
# 通过 git log 查看历史提交记录,发现只剩下最后一次的提交记录,而无法看到历史的提交记录
> git log
commit 75bdec69e39ea85fcdc750ef289ece7e76d2b79c (grafted, HEAD -> develop/branch_1, origin/develop/branch_1)
Author: ghimi
Date:   Fri Mar 3 15:01:36 2023 +0800
Merge commit 'fc3fe2a0002fc394696ec131797038707f5f4864' into /develop/branch_2
> git fetch --unshallow
remote: Enumerating objects: 79593, done.
remote: Counting objects: 100% (79593/79593), done.
remote: Total 79593 (delta 2162), reused 77796 (delta 2162), pack-reused 0
Receiving objects: 100% (79593/79593), 23.05 MiB | 3.43 MiB/s, done.
Resolving deltas: 100% (2162/2162), done.
From www.gitee.com:ghimi/hello* branch                develop/branch_1 -> FETCH_HEAD
# 此时通过 git log 命令查看时就会发现能够看到全部的历史提交记录了
> git log

使用 git checkout -t origin/develop/branch_1 在本地创建分支并追踪同名的远程分支

使用 Idea 的同学肯定用过,当在 checkout 远程分支后,会在本地为远程创建一个同名的分支,我们可以在本地分支上完成开发然后推送到相关远程分支上去。其实使用的就是 -t 选项

> git checkout -t origin/develop/branch_1
Switched to a new branch 'develop/branch_1'
Branch 'develop/branch_1' set up to track remote branch 'develop/branch_1' from 'origin'.

克隆不拉取标签 --no-tags

打标一般用于线上版本管理,在本地开发中其实没什么用,可以在 git clone 或者 git fetch 的时候设置选项 --no-tags 指定不拉取标签。

参考资料

Git clone 手册

[教程]使用 Git 克隆指定分支相关推荐

  1. git克隆指定分支的代码

    1.在左上角的 Brach 分支选择对应的分支,并记住该分支名 2.git clone 下载 如,以下的分支名为:0.4 具体代码如下: git clone -b 分支名 仓库地址#本例中下载0.4分 ...

  2. 【git克隆指定分支代码 到本地】

    1. 使用git怎么克隆指定分支代码 在开发的过程中我们上传到 git 远程仓库的代码,其master主分支一般是用来做项目上线的时候用的代码,我们在本地开发的代码一般情况下是以直接往主分支上面推送代 ...

  3. git clone 指定分支的内容

    使用Git下载指定分支命令为:git clone -b 分支名仓库地址 使用Git下载v.2.8.1分支代码,使用命令:git clone -b v2.8.1 https://git.oschina. ...

  4. 使用Git下载指定分支

    使用Git下载指定分支 使用Git下载指定分支命令为:git clone -b 分支名 仓库地址 使用命令: git clone -b feature_v2.1.11_20210129_upgrade ...

  5. 克隆指定分支git clone -b

    克隆指定的分支: git clone -b 分支名 仓库地址 注意: 克隆某分支到本地目录,然后在该目录下push时,对应的就是push到远端的对应分支.

  6. git 克隆远端分支,关联到本地,修改代码并提交到远程分支

    背景: 多人项目,每人远程一个分支,直接克隆只可克隆master分支,看不到自己分支上的代码. 需求: 同步远程分支到本地,将本地分支与远程分支进行关联,修改代码,更新到远程分支. 实现: 按照正常流 ...

  7. linux git clone 指定分支

    git clone -b develop http://192.168.11.11:8888/scm/git/vrmmo 指定下载develop分支 转载于:https://www.cnblogs.c ...

  8. git提交指定分支代码

    1.查看所有分支 git branch -a 2.创建分支 git branch 分支名称 3.切换分支 git checkout 分支名称 4.添加修改代码到缓存(注意最后的"." ...

  9. git clone 指定分支

    git clone -b 分支名 --depth=1 git仓库地址

最新文章

  1. 【CVPR2020-中科院-腾讯优图】基于注意力卷积二叉神经树的细粒度视觉分类
  2. HYSBZ - 2301 莫比乌斯反演
  3. c语言使用zlib实现文本字符的gzip压缩与gzip解压缩
  4. 分享沙龙丨如何打磨一款好产品?
  5. 看一下iFM最新文章
  6. rows是横着的还是cols_在Flask中如何自定义TextAreaField的rows和cols且将表单渲染为bootstrap的样式?...
  7. PHP面试题:你所知道的php数组相关的函数?
  8. TypeScript Type Compatibility 类型兼容性
  9. 前端学习(1171):includes方法
  10. ajax child,如何在ajax上使用this.children
  11. 大数据分析机器学习(一)之线性模型-年龄和心率关系
  12. USB移动硬盘使用中的怪现象
  13. Python 基础总结
  14. java 接口 白名单,SpringBoot HTTP接口跨域调用及白名单实现
  15. Hadoop:一文详解MapReduce的工作机制
  16. 如何在ECLIPSE中使用MVN CLEAN INSTALL
  17. linux c select函数返回值,linux c中select使用技巧
  18. [Ynoi2016]炸脖龙I/Nephren Ruq Insania
  19. 计算机组老师颁奖词,学生表彰颁奖词与学生计算机室管理制度合集.doc
  20. 洛谷P1458 [USACO2.1]顺序的分数 Ordered Fractions

热门文章

  1. Go Http 错误记录
  2. FPGA刷题P1:4选1多路选择器、异步复位的串联T触发器、奇偶校验、移位拼接乘法
  3. 冒泡排序(优化)SCL算法
  4. java如何避免恶意连续点击_一行代码实现防止按钮重复点击
  5. 高薪专业篇:普通二本也能上手既轻松又不头冷的IT岗位
  6. 小程序基础开发(四):weui-wxss组件表单页面,WxValidate.js组件表单验证上传
  7. 智络会员管理软件的主要特点
  8. access 战地1不加入ea_《战地5》即日起加入EA Access免费阵容
  9. 牛逼!有人在 GitHub 上把 Windows 95 做成了一款软件,可玩扫雷和纸牌!
  10. js超好懂的螺旋矩阵解法(用递归)