我最近注意到我不小心提交了包含敏感信息的.env
文件。我最好的猜测是,当Webstorm问我是否要将文件添加到git时,我不小心点击了OK,因为它在创建后立即被添加到.gitignore
文件中。我没有注意到这个文件被连续几周推送到VCS。我立即运行了git rm --cached .env
并使用BFG-Repo Cleaner清除了我的版本历史记录中的文件。问题是虽然BFG-Repo Cleaner完成了它的工作(尽管很奇怪,现在每个提交都是重复的),并且文件在我的提交历史记录中的任何地方都不再存在,但实际删除文件的提交显示了删除的确切内容,即密码和密钥。这是运行BFG-Repo Cleaner的常见结果吗?如果是这样,我怎样才能从历史记录中删除该提交而不会丢失自那时以来所做的任何提交?我能找到的大多数答案都指的是使用git reset --hard
在我想要摆脱之前恢复提交,但我不希望在那之后丢失我的工作。
我发现设计用于从版本历史记录中删除敏感数据的工具仍然会显示删除敏感数据的提交的diff
。
我使用了BFG-Repo-Cleaner,因为它似乎是git-filter-branch
的一个更容易的替代品,但是现在有一个使用git-filter-branch
的用例,不是删除文件,而是删除commit,显示我删除的文件的内容?
答案 0 :(得分:1)
选项1:如果您将文件作为单独的提交提交。
JList<String>
让我们说:这是你的提交历史
git rebase -i commit_hash of one less than needed and remove that commit.
你想要删除第二次提交。
commit 5347819473b66359e8324004470040bee0892447 (HEAD -> master)
Author: XXXX
Date: Wed Dec 13 21:43:29 2017 +0530
third commit
blah2.h | 1 +
1 file changed, 1 insertion(+)
commit d88e9dc5aadfad5872a2cc8214ba5295e2668526
Author: XXXX
Date: Wed Dec 13 21:42:56 2017 +0530
second commit
blah1.h | 1 +
1 file changed, 1 insertion(+)
commit 2419b28fee57a6923ce37e2e144c12d88fb75183
Author: XXXX
Date: Wed Dec 13 21:42:33 2017 +0530
first commit
blah.h | 1 +
1 file changed, 1 insertion(+)
选项2:如果您同时提交其他更改文件,则
git rebase -i 2419b28fee57a6923ce37e2e144c12d88fb75183 - Commit hash of first commit. And then interactively remove the line containing the second commit and save.
将该文件添加到git ignore并将当时的所有更改提交为新提交。在这种情况下,从现在提交该文件的那一刻起,您将丢失项目的历史记录。