1

我的 GitHub 存储库中有一个文件,我想从以前的提交中删除它。我使用了 BFG Repo-Cleaner 的delete-files命令,它似乎可以工作,但是当我进入我的 GitHub 存储库时,该文件仍然在所有以前的提交中。如果我再次尝试执行该命令,它会给我一个

BFG 中止:没有要更新的参考 - 没有找到脏提交?

我是否误解了 BFG 的工作原理?如果是这样,我如何从我过去在 GitHub 上的提交中删除该文件?

以下是我采取的步骤:

  1. --mirror使用该标志将我的 GitHub 存储库的副本克隆到本地文件夹中。
  2. 然后cd我到我当地的视觉工作室项目。
  3. 然后我输入了命令java -jar bfg-1.12.1.13.jar --delete-files <.json file I wanted to delete> <my local clone copy from step 1>.git
  4. 然后我进入git reflog expire --expire=now --all && git gc --prune=now --aggressive
  5. git push
4

2 回答 2

2

A 一个git push人不应该工作,因为BFG 回购清理器确实重写了回购的历史。

但是,当您使用 克隆(如您所做的那样)时,它应该可以工作--mirror,因为在 上git push,本地更新的 refs 将在远程端强制更新。

注意:

默认情况下,HEAD 分支是受保护的,虽然它的历史记录将被清除,但最近的提交('tip')是一个受保护的提交,它的文件层次结构根本不会改变。

在推回之前,不要忘记从您的 HEAD(当前工作树)中删除您的文件。

经过讨论,似乎命令没有在正确的文件夹中执行。该文件夹应以.git:: xxx.gita结尾clone --mirror是一个裸仓库。

于 2016-09-25T07:16:40.777 回答
0

在您的步骤中跳过第 2 步,它应该可以工作(不要cd进入您的<repo-name>.git)。

您需要从包含文件夹的文件夹中运行 BFG <repo-name>.git。BFG 正在寻找<repo-name>.git在工作目录中调用的文件夹。这就是为什么它没有改变任何东西。

于 2018-02-22T16:49:44.583 回答