0

我最近注意到我不小心提交了一个.env包含敏感信息的文件。我最好的猜测是,当 Webstorm 询问我是否要将文件添加到 git 时,我不小心单击了确定,因为它是.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在这里使用,不是删除文件,而是删除显示我删除的文件内容的提交?

4

1 回答 1

1

选项 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 ignore 并从那时起将所有更改作为新提交提交。在此,您将丢失从提交该文件到现在的项目历史记录。

于 2017-12-13T16:27:04.180 回答