美文网首页
git彻底删除提交历史

git彻底删除提交历史

作者: jiezzy | 来源:发表于2020-08-05 14:13 被阅读0次

<meta charset="utf-8">

git为我们提供了"后悔药", 但有时候我们会将一些敏感数据提交至git仓库,虽然使用了git rm删除文件,但是文件仍然存在在提交历史中。git提供了两个工具给我们去彻底删除提交历史的方法。

做以下操作时切记先备份gitlab服务器

git filter-branch

  1. git clone项目到本地

  2. 使用git filter-branch命令移除版本库中的信息, 并重写commit记录。

   # 这里演示了删除一个文件, 将FILENAME替换为文件名,多个以空格分隔, 可以用*匹配目录。

   git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch FILENAME' --prune-empty --tag-name-filter cat -- --all

   # 还可以直接整个test文件夹
   git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch test' --prune-empty --tag-name-filter cat -- --all

   # https://www.it1352.com/801467.html
   git filter-branch --force --index-filter   'git rm --cached --ignore-unmatch 200MB-filename'   --prune-empty --tag-name-filter cat -- --all
   git push --all -f

  rm -rf .git/refs/original/
  git reflog expire --expire=now --all
  git gc --prune=now

(可选) 执行完成后,归档历史已经清理完成,但还有一些垃圾文件,用下面的命令清理

```
rm -rf .git/refs/original/
git reflog expire --expire=now --all
git gc --prune=now
git gc --aggressive --prune=now

```
  1. 确认无误后,提交至版本库(切记,下面的操作将不可逆)

    git push origin --force --all
    git push origin --force --tags
    
    
  2. 操作完成后,需要通知小伙伴们重新clone代码,因为提交历史被修改了,远程仓库很可能会与本地仓库冲突

    所以在维护时,应该提醒大家先把代码全部提交,带清理完后,然小伙伴们重新clone使用。

BFG Repo-Cleaner

git官方也推荐使用这个工具,且处理速度要比git filter-branch快上很多。

参考

相关文章

网友评论

      本文标题:git彻底删除提交历史

      本文链接:https://www.haomeiwen.com/subject/jyonrktx.html