Contents

Git的使用

Git工具的基本使用流程可以在其官网或者各大技术论坛上获得非常详细的说明和形象的使用案例,但有些时候我们需要对代码仓库进行更细粒度的或更复杂的调整,此时就需要用到一些Git的高级或不常用的特性。笔者的态度是碰到实际需求了再去具体了解相关特性,然后不断总结。

清空项目的commit历史

笔者想在保留某个代码仓库所有文件当前状态的前提下清空其commit历史,目前有两种方式。

方法一:重新初始化仓库

git的项目本地配置和所有版本维护信息全都保存在项目根目录的.git/文件夹中,我们可以删除它后再重新执行git init来清空所有项目历史。

方法二:使用孤儿分支代替主支

执行git checkout --orphan <branch_name>创建并切换到一个和主支脱离,不含任何commit历史的孤儿分支

在这个分支上执行git branch可以看到主支,但是一旦切换回主支,执行git branch将无法看到这个孤儿分支,这种情况下这个孤儿分支就无法访问了(笔者猜测它会被立即删除或者等待被GC清理)。

刚切换到这个孤儿分支时,仓库的状态是,所有文件保持原样,并且没有任何提交历史。接下来我们可以在这个分支上进行开发。

执行git branch -D main删除原来的主支,执行git branch -m main将孤儿分支重命名为main,作为新的主支,执行git push -f origin main:main来强制覆盖远程仓库的版本记录。