如何从 git 存储库中删除文件,但只删除历史记录中的某个时间点?

How to remove file from git repository but only up to a certain point in history?

我知道如何使用 filter-branch 将文件完全排除在存储库历史记录之外。发生的事情是我在一些提交之前的文件中有一些敏感信息,但我已经删除了它并且我想从那个安全提交开始保留文件。

我可以吗?还是我必须做一些克隆技巧?

我认为 BFG Repo-Cleaner 正是您要找的。

您可以使用它来替换删除整个历史记录中工作树中包含的敏感信息(例如密码)的存储库。这是他们 documentation:

的一个例子
bfg --replace-text passwords.txt /path/to/repository

passwords.txt 文件将包含一系列字符串以匹配它们应替换为的值。例如:

password             # Replaces the string 'password' with '***REMOVED***' (default)
password==>DELETED   # Replaces the string 'password' with 'DELETED'
password==>          # Replaces the string 'password' with an empty string
regex:password.+==>  # Replaces using a regular expression with an empty string

git-filter-branch 一样,这是一个 rewrite history 操作,因此适用通常的免责声明。