使用git新建一个空白分支
前言
最近在工作中遇到这样一个场景,一个使用git进行版本管理的项目打算进行重构,并且在原版本的基础上新拉了一个分支出来。但开发过程中发现首次拉代码的时候,
.git
目录的文件大小还是很大,而且也保留了原分支的代码提交记录。由于重构使用新架构其实并不依赖原项目之前的代码,所以希望可以实现新增不受原分支影响的空白分支出来。本篇文章将对实现的步骤进行介绍,详细步骤可以看第一章,只要执行命令的话可以直接看第二章~
一、使用checkout --orphan新建空白分支
步骤一: 先在远程仓库上面新建一个分支(如果已经建过了这一步可以省略)
新建完成后,我们可以看到新建的分支其实是基于旧分支的代码的,而且也带着原有分支的提交记录
步骤二:把代码拉到本地
git clone -b branchName sshUrl
步骤三:使用checkout命令新建一个空白分支
git checkout --orphan newBranchName
执行上面这条命令后,会新建一个空白分支并且本地会自动切换到新分支上面。
步骤四:把文件内的内容添加到分支中
经过步骤三后,本地虽然新建了一个分支,但是此时还需要提交一次改动,才能让这个分支正式生效。用git branch
命令查看,我们在输出结果中是看不到新建的这个分支的
如果想保留原文件,只清空提交记录,可以直接使用下面的命令把文件加入到git管理中,如果是不想要原分支的文件的话,需要先rm -rf .
清一下文件,根据需要添加进对应的文件后,再纳入到git管理中。
git add -A # Add all files and commit them
git commit
执行完上面这条命令后,我们会发现现在已经能看到新的分支了
步骤五:完成本地分支的切换
git branch -D oldBranchName # Deletes the master branch
git branch -m oldBranchName # Rename the current branch to master
简单理解的话,就是把本地的原分支给删掉,再把刚刚新建的分支命名为旧分支的名字,从而覆盖掉新建分支test1
原有的旧代码提交记录。
步骤六:将代码推送到远程仓库
这一步也是为了让远程仓库的分支也变为空白分支
git push -f origin master # Force push master branch to github
我们可以登录码云上面看,可以看到之前新建的test1分支,现在确实没有了原来的代码提交记录,只有刚刚的代码提交记录
步骤七:修剪本地的.git
目录
这一步是为了减少本地的.git
目录大小(不过本人实测好像没什么用...)
git gc --aggressive --prune=all # remove the old files
二、纯命令版
git checkout --orphan newBranch
git add -A # Add all files and commit them
git commit
git branch -D master # Deletes the master branch
git branch -m master # Rename the current branch to master
git push -f origin master # Force push master branch to github
git gc --aggressive --prune=all # remove the old files
三、上面这种做法的优缺点
新建空白分支最初的目的有2个,一个是清除不相关的代码提交记录,第二是减少.git
目录的大小。但是其实后这种方式实践后只能实现第一个目标,对于减少.git
目录大小并没有什么作用。但转念一想,其实既要新分支没有无关的代码提交记录,又想减少.git
目录大小的话,感觉和新建一个仓库似乎也没什么区别了...
总的来说,如果只是单纯的想要一个提交记录为空白的新分支,那么git checkout --orphan
会是一个很好的选择。
参考资料:
1、stackoverflow:让当前提交成为初始化提交
2、git官网 checkout用法