我最近注意到我意外地提交了一个包含敏感信息的.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的用例,不是用来删除文件,而是用来删除显示我删除的文件内容的提交?
发布于 2017-12-14 00:27:04
选项1:如果您将文件作为单独的提交提交。
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(+)并且您想要删除第二次提交。
git rebase -i 2419b28fee57a6923ce37e2e144c12d88fb75183 - Commit hash of first commit. And then interactively remove the line containing the second commit and save. 选项2:如果您还提交了包含其他更改的文件,那么
git reset commit_hash of one less than needed. 将该文件添加到git,忽略并将所有更改作为新提交提交。在这种情况下,您将丢失从提交该文件到现在的项目历史记录。
https://stackoverflow.com/questions/47797281
复制相似问题