为什么要清空 git 中的 commit 记录?

大多数开发者喜欢在 Github 创建自己的 Repository, 而后进行持续开发, 然后就是不断的 add、commit、push 等, 中间难免会把自己比较重要的隐私信息 push 到远端 origin, 如果你删除了再 push 远端 origin, 提交 commit 记录里面也是存在的,并且大多是开发者创建的都是 Public Repository, 所有人通过该仓库的独有链接可以直接 clone 到本地。那么就会造成隐式信息的直接暴露。

如何清除

主要使用到的一个命令就是 git checkout --orphan

通过 git checkout --help 查看帮助信息:

// Create a new orphan branch, named <new_branch>, started from
// <start_point> and switch to it. The first commit made on this new
// branch will have no parents and it will be the root of a new
// history totally disconnected from all the other branches and
// commits.
// 中文翻译:
// 创建一个独立的 new_branch 分支,HEAD 指向当前分支,并自动切换到该分支;
// 分支没有父级结点,它是一个新的根记录,不与其他任何分支和提交记录有连接。

// The index and the working tree are adjusted as if you had
// previously run "git checkout <start_point>". This allows you to
// start a new history that records a set of paths similar to
// <start_point> by easily running "git commit -a" to make the root
// commit.
// 中文翻译:
// 它会基于你之前执行"git checkout <start_point>"的 start_point 分支,调整新的索引和分支树
// 你可以通过"git commit -a"提交一个新 commit 记录作为根提交记录,这样的话你就有个一个新的历史记录,
// 类似于 start_point 分支的一系列提交记录痕迹;

// This can be useful when you want to publish the tree from a commit
// without exposing its full history. You might want to do this to
// publish an open source branch of a project whose current tree is
// "clean", but whose full history contains proprietary or otherwise
// encumbered bits of code.
// 中文翻译:
// 如果你想把你的分支树变成只有一个 commit 记录,不想暴露他所有提交历史,那么它就很有用。
// 如果你想通过这样做发布一个开源分支工程,当前所有包含专利记录分支树就会被清空,否则就是一堆冗余的代码;

// If you want to start a disconnected history that records a set of
// paths that is totally different from the one of <start_point>, then
// you should clear the index and the working tree right after
// creating the orphan branch by running "git rm -rf ." from the top
// level of the working tree. Afterwards you will be ready to prepare
// your new files, repopulating the working tree, by copying them from
// elsewhere, extracting a tarball, etc.
// 中文翻译:
// 如果你想开始一个全新的提交记录,完全与 start_point 分支不同,在你创建这个独立分支后,
// 通过 'git rm -rf', 从根工作空间删除所有工作空间和索引里面的文件。
// 随后,你可以通过从别处复制准备你的新文件来重新填充你的工作空间。

思路如下:

  • 使用 git checkout --orphan new_branch , 基于当前分支创建一个独立的分支 new_branch
git checkout --orphan new_branch
  • 添加所有文件变化至暂存空间
git add -A
  • 提交并添加提交记录
    git commit -am "commit message"
复制代码
  • 删除当前分支(我的当前分支是master, 切记master谨慎删除)
git branch -D master
  • 重新命名当前独立分支为 master
git branch -m master
  • 推送到远端分支(-f 是 --force 的缩写, 一定要谨慎使用, 好多项目中你或者是别人的代码被覆盖都是这么操作的, 除非只有你一个人在开发)
git push -f origin master

提交成功后就成功清除了以前的 commit 记录了。

切记!

  • 切记谨慎删除本地 master 分支
  • -D 是--delete的缩写
  • -f 是 --force 强制操作
  • git rm -rf 谨慎使用
  • 以上不要随意使用(个人项目没关系),切记!切记!切记!

参考文章:[git使用] 如何清空所有的commit记录 - 掘金


前天遇到了小鹿,昨天是小兔子,今天是你。