如何删除第一次提交中意外添加的一些文件?

时间:2013-12-27 21:57:21

标签: git

所有提交都在本地提交。没有相关的远程事物。

我已经提交了一些提交(比如AA,BB和CC),但我想在第一次提交(AA)中删除一些文件。通常说如果我需要在BB中更改某些内容我会git rebase -i BB^然后git reset BB^然后进行更改,但这次git不允许我在第一次提交之前触摸任何内容(即我可以& #39; t rebase AA ^)。我尝试了git checkout AA,但在这种情况下,我将处于分离状态,除了重写提交消息之外,仍然无法改变该提交中的任何内容。

如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

以下内容可以解决您的问题:

git filter-branch --tree-filter 'rm fileToRemove' --prune-empty --force HEAD

其中fileToRemove将替换为文件名或掩码。

要删除目录,请执行以下操作:

git filter-branch --tree-filter 'rm -fR dirToRemove' --prune-empty --force HEAD

这有效地从给定仓库的所有修订中删除了指定的文件/目录,因为它永远不会存在。

作为预防措施,请在更改前克隆您的回购。

答案 1 :(得分:0)

我在搜索中寻找有关如何删除意外包含的数据的答案,我想记录一下我发现并最终使用的内容。

我的最终解决方案是在github.com的帮助文件中找到的:https://help.github.com/articles/removing-sensitive-data-from-a-repository/

总结:Github建议使用BFG回购清洁器。 https://rtyley.github.io/bfg-repo-cleaner/。他们说:BFG Repo-Cleaner是git filter-branch更快,更简单的替代方法,用于删除不需要的数据。例如,要删除包含敏感数据的文件并保持最新提交不变,请运行:

$ bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

要替换passwords.txt中列出的所有文本,只要在存储库的历史记录中可以找到它,请运行:

$ bfg --replace-text passwords.txt

有关完整用法和下载说明,请参阅BFG Repo-Cleaner的文档。

希望这对某人有帮助。