如何从 GitHub 上彻底删除敏感提交?

Dan*_*zak 3 git security privacy

几天前,我读到了有关 Github 隐私基础知识的文章,其中说提交者的电子邮件可以通过简单的 Github API 请求查看。

我设置了电子邮件别名,但我想更改过去提交的电子邮件。尝试使用站点和 .gitconfig 的别名

change-commits = "!f() { VAR1=$1; VAR='$'$1; OLD=$2; NEW=$3; 
  echo \"Are you sure for replace $VAR $OLD => $NEW ?(Y/N)\";
  read OK;
  if [ \"$OK\" = 'Y' ] ; 
  then shift 3; 
  git filter-branch --env-filter \"if [ \\\"${VAR}\\\" = '$OLD' ]; 
  then export $VAR1='$NEW';echo 'to $NEW'; fi\" $@; fi;};f " 
Run Code Online (Sandbox Code Playgroud)

之后,当我输入时,git log每次提交都有新邮件,但在 API 调用https://api.github.com/users/(usuername)/events/public之后,我会同时看到旧电子邮件和新电子邮件

kel*_*vin 5

正如所评论的,您不能真正“更改”提交,只能使用相同或相似的数据创建一个新提交。因此,当您进行修改git filter-branchgit rebase任何其他形式的修改时,您仍然在创建 新的提交

而运行时git push -f,唯一的区别是远程 分支引用被强制更新;它仍然发送新的提交,而如何处理旧的提交(如果有的话)取决于远程存储库。

对于GitHub ,当您执行强制推送时,它不会立即从存储库中删除那些旧的提交。

来自官方GitHub 帮助

警告:将提交推送到 GitHub 后,您应该考虑其中包含的任何数据是否会受到泄露。如果您提交了密码,请更改它!如果您提交了密钥,请生成一个新密钥。

本文介绍如何从 GitHub 存储库中的任何分支或标签进行敏感数据的提交。但是,需要注意的是,这些提交仍然可以在存储库的任何克隆或分支中直接通过 GitHub 上缓存视图中的 SHA-1 哈希值以及引用它们的任何拉取请求来访问。您无法对存储库的现有克隆或分支执行任何操作,但可以通过联系 GitHub 支持来永久删除 GitHub 上存储库的所有缓存视图和拉取请求。

因此,为了让旧的提交在合理的时间范围内停止出现在 API 中,唯一的选择是:

警告:虽然前一个选项速度更快,它也会删除wiki 、问题评论


注意:这里有关于 悬空提交的含义的更全面的解释:

/sf/answers/2298817811/