git - git reset 会删除历史记录吗?

标签 git security github

我不小心在 git 中提交了一些敏感信息(仅在本地),我想以一种简单的方式将其从 git 历史记录中删除。将

git reset --soft HEAD~1

然后取消暂存敏感信息并添加到 gitignore 是否足以将其从 git 历史记录中完全删除?

最佳答案

不,软重置是不够的。 这样做会将文件保留在您的索引中(您暂存要提交的文件的位置)。这意味着,git 仍在跟踪文件。

您将需要进行混合重置,这也会取消暂存这些文件。正如 René 指出的那样,删除文件或将其添加到您的 .gitignore 也是一个好主意,这样您就不会不小心再次提交它。

这就足够了,所以敏感信息不会传输到 git push 上的远程服务器。

但是,该信息仍在您的本地存储库中。如果您因不小心重置太多而“松散”了一个提交,git reflog是一个非常有用的工具。

现在清除所有无法通过分支或标记访问的提交:

git reflog expire --expire=1.minute --all
git prune
git gc
  1. 从 reflog 中删除所有早于 1 分钟的条目。如果有任何剩余的引用,提交将不会被删除。这样的引用可以来自另一个提交、分支、标记以及引用日志。
  2. 删除所有不再可达的提交。
  3. 做一些家务活。有关更多信息,请查看 documentation

reflog expireprune 是破坏性操作。我建议首先使用 --dry-run 参数运行这些命令,以查看究竟删除了什么。

关于git - git reset 会删除历史记录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32175441/

相关文章:

javascript - 使用 Firefox 插件的跨域通信

android:确定范围内wifi网络的安全类型(不连接它们)

git - 如何将我的本地存储库与 GitHub 上的中央存储库同步?

C# - 防止重新编译

git 忽略特定目录

GitLab:如何判断我对项目的访问级别?

git - 如何将代码从远程服务器(Rackspace)推送到 bitbucket?

git - git tree + Heroku + Github 中的密码

github - 在自述文件中包含许可证文件

git - 如何忽略 Heroku 中的文件而不是 Git 中的文件