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

git彻底删除提交历史

作者: 猴子精h | 来源:发表于2017-07-07 18:11 被阅读1300次

    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
      

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

      rm -rf .git/refs/original/
      git reflog expire --expire=now --all
      git gc --prune=now
      git gc --aggressive --prune=now
      
    3. 确认无误后,提交至版本库(切记,下面的操作将不可逆)

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

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

    BFG Repo-Cleaner

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

    参考

    相关文章

      网友评论

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

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