所有提交都在本地提交。没有相关的远程事物。
我已经提交了一些提交(比如AA,BB和CC),但我想在第一次提交(AA)中删除一些文件。通常说如果我需要在BB中更改某些内容我会git rebase -i BB^
然后git reset BB^
然后进行更改,但这次git不允许我在第一次提交之前触摸任何内容(即我可以& #39; t rebase AA ^)。我尝试了git checkout AA
,但在这种情况下,我将处于分离状态,除了重写提交消息之外,仍然无法改变该提交中的任何内容。
如何解决这个问题?
答案 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的文档。
希望这对某人有帮助。