【发布时间】:2012-07-14 15:59:14
【问题描述】:
假设我发现有些文件不应该在我的 git 修订版中。例如密码、API 密钥和商业机密文件。
有没有办法在它们出现的修订版中删除这些文件?并且仍然保留该修订版中的其余文件?
【问题讨论】:
标签: git
假设我发现有些文件不应该在我的 git 修订版中。例如密码、API 密钥和商业机密文件。
有没有办法在它们出现的修订版中删除这些文件?并且仍然保留该修订版中的其余文件?
【问题讨论】:
标签: git
git filter-branch 可能有用。这允许您重写一系列过去的提交,更改提交的内容。
如果您所做的更改从未离开您的本地存储库,那么这将起作用。如果您将有问题的更改推送到某个地方,或者有人从您那里撤消了这些更改,那么您在每个人的存储库中删除它们的问题就更大了。
但是,要修复您的本地存储库:
git filter-branch --index-filter 'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt' master..abc
这意味着:
git filter-branch:让我们重写一些提交!
--index-filter:更改每个提交的索引而不实际在磁盘上检查它。
'git rm --cached --ignore-unmatch bad-file1.txt bad-file2.txt':对于每个提交,如果存在两个文件,则取消暂存它们。
master..abc:对分支 abc 上的所有提交执行此操作,返回到它从主分支分叉的位置。你也可以说“master~3”来重写过去的 3 次提交,或者说任何其他的range of revisions。您还可以使用“-- --all”(两个破折号、空格、两个破折号、“全部”)来重写存储库中的所有内容。
【讨论】: