分类
git 技术

Git 操作特定分支的小技巧

加入新的开发团队之后,难免有一些东西不适应。比如,我团队要求把所有代码,不分前后端放到一个仓库里;而且,还都不删分支,于是现在代码仓库有 3k+ 分支……

我很受不了,clone 一次代码大几个 G,我感觉我的固态硬盘在呻吟……

于是简单研究了一下,只 clone 特定分支的技巧,记录如下。

clone 特定分支最近一次提交

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

上面这段命令可以只 clone 一个分支、最近一次提交,速度非常快。缺点是会损失代码提交记录,如果你要回顾历史代码,可能会比较麻烦。不过具体到我负责的这个项目,它的历史记录乱成一张蜘蛛网,git blame 出来全是各种 merged branch,实在没啥看头。

fetch 特定分支最近一次提交

只 clone 一个分支可能不太够,比如我要看别人的提交,就要把别人的分支拉下来。这个时候,如果你用上面的方式 clone 代码,再执行 git fetch 是拉不到其它分支的,因为本地 git 配置里就不存在别的分支。

所以这时候要:

git fetch --depth 1 origin 远程分支:本地分支
git checkout 本地分支

修改 .git/config

除了上面的方法,你还可以修改 .git/config。打开 .git/config,你会看到这样的配置:

[remote "origin"]
        url = git@github.com:username/repo.git
        fetch = +refs/heads/master:refs/remotes/origin/master

如果直接 git clone 不加参数得到的仓库,“master”那里会是 *。此时,你可以把想要增加的分支列在后面,然后照常 git fetchgit checkout 即可。修改后的配置文件大约是:

[remote "origin"]
        url = git@github.com:username/repo.git
        fetch = +refs/heads/master:refs/remotes/origin/master
        fetch = +refs/heads/bugfix:refs/remotes/origin/bugfix
        fetch = +refs/heads/release:refs/remotes/origin/release

此时你就可以只操作 masterbugfixrelease 三个分支了,其它分支不会干扰你。