美文网首页程序员
使用 BFG Repo-Cleaner 修改 Git 提交历史

使用 BFG Repo-Cleaner 修改 Git 提交历史

作者: flmnix | 来源:发表于2020-03-16 13:06 被阅读0次

为什么要修改 Git 提交历史

修改 Git 历史,一般有以下两个原因:

  • 删除密码、API Key 等敏感数据,因为即使你在最新的提交删除了他们,在历史提交里也存在;
  • 删除超大文件。

超大文件问题经常出现在当你从一个 Git 托管网站换到另一个时,常因为后者不支持大文件,导致推送不上去。即使最新版删除了大文件,因为大文件存在在历史中,依然不能推送。

目前我测试几个网站的文件大小限制:

操作步骤

本文演示删除历史中的大文件步骤。

安装 bfg

如果是 MacOS,直接安装即可:

brew install bfg

如果是其他系统,可以下载 1.13.0 版的 jar 包,并将下面命令中的 bfg 替换成 java -jar path/to/bfg-1.13.0.jar

克隆仓库

git clone --mirror git@xxxxxx.com:jitao/project.git

这里使用 --mirror 参数,表示克隆出来的是一个 bare 仓库。

这一步最好备份一下仓库。

改历史

bfg --delete-files home.mp4 project.git

删除 home.mp4 这个文件,注意参数只能是文件名,不包含路径。如果传入一个路径,会报错:

Error: *** Can only match on filename, NOT path *** - remove '/' path segments

正常运行大概输出如下:

Using repo : /Users/jitao/workspace/project.git

Found 527 objects to protect
Found 2 commit-pointing refs : HEAD, refs/heads/master

Protected commits
-----------------

These are your protected commits, and so their contents will NOT be altered:

 * commit 9bbd9c4e (protected by 'HEAD')

Cleaning
--------

Found 336 commits
Cleaning commits:       100% (336/336)
Cleaning commits completed in 435 ms.

Updating 1 Ref
--------------

    Ref                 Before     After
    ---------------------------------------
    refs/heads/master | 9bbd9c4e | bc0c11c6

Updating references:    100% (1/1)
...Ref update completed in 24 ms.

Commit Tree-Dirt History
------------------------

    Earliest                                              Latest
    |                                                          |
    .............................DDDDDmmmmmmmmmmmmmmmmmmmmmmmmmm

    D = dirty commits (file tree fixed)
    m = modified commits (commit message or parents changed)
    . = clean commits (no changes to file tree)

                            Before     After
    -------------------------------------------
    First modified commit | 4021098d | ce77dc85
    Last dirty commit     | d73ece33 | e26922da

Deleted files
-------------

    Filename   Git id
    ------------------------------
    home.mp4 | 8ab9914d (114.1 MB)


In total, 187 object ids were changed. Full details are logged here:

    /Users/jitao/workspace/project.git.bfg-report/2020-03-15/15-02-30

BFG run is complete! When ready, run: git reflog expire --expire=now --all && git gc --prune=now --aggressive

信息的最后 bfg 还夹带了点私货:

--
You can rewrite history in Git - don't let Trump do it for real!
Trump's administration has lied consistently, to make people give up on ever
being told the truth. Don't give up: https://www.rescue.org/topic/refugees-america
--

呵呵。

清理仓库

cd project.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive

推送

git push

参考文章

本文首发于微信公众号:肖念青,转载请保留原始出处信息。

我的个人网站:https://www.jitao.tech

相关文章

  • 使用 BFG Repo-Cleaner 修改 Git 提交历史

    为什么要修改 Git 提交历史 修改 Git 历史,一般有以下两个原因: 删除密码、API Key 等敏感数据,因...

  • BFG Repo-Cleaner 的使用

    官网 https://rtyley.github.io/bfg-repo-cleaner/最新版需要确保本地的ja...

  • BFG Repo-Cleaner - 从 Git 历史中真正删除

    背景 Git 操作时,经常“不小心”上传一些不必要的(大)文件,或者私密数据,等等。 当然可以从本地把这些文件删除...

  • 学习Git(二)

    版本回退经过提交文件,修改文件之后,可以使用git log来查看历史操作记录 git log可以查看由近到远的提交...

  • Git修改提交历史

    Git的一个优势在于,当你在和别人共享你的工作之前,可以随便修改你的提交历史,当然不管在什么时候,最好不要改动已经...

  • Git使用记录

    本地Git撤回提交记录 使用git log查看提交的历史记录 使用git reset --soft head~1撤...

  • git 修改最近的 commit message

    git 修改已经的提交信息 当我们使用 git 提交代码之后我们发现,提交信息描述有问题,想要仅仅修改描述信息而不...

  • git学习总结

    git status:掌握工作时区状态 git diff:查看修改的内容 git log:查看提交历史 git r...

  • git 一些用法: 合并,修改提交信息,回退版本

    1. 合并多次提交 1) 查看修改历史 git log 2) 合并6次提交git rebase -i HEAD~6...

  • Git 基础 - 查看提交历史

    查看提交历史 git log 命令用于查看提交历史 默认不使用参数的话,git log 会按提交时间列出所有的更新...

网友评论

    本文标题:使用 BFG Repo-Cleaner 修改 Git 提交历史

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