如何从GitHub完全删除敏感提交?

时间:2018-08-04 14:34:05

标签: git security privacy

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

我设置了电子邮件别名,但是我想更改过去提交的电子邮件。尝试过this网站和.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 " 

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

2 个答案:

答案 0 :(得分:2)

As commented,您不能真正“更改”提交,只能创建一个新的提交 具有相同或相似的数据。因此,当您执行git filter-branch时, git rebase或任何其他修改形式,您仍在创建 新提交

当运行git push -f时,唯一的区别是远程 分支参考已强制更新;它仍然发送新的提交以及什么 将旧提交(如果有的话)由远程存储库完成。

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

来自官方GitHub Help

  

警告:将提交推送到GitHub后,您应该考虑   它包含的数据将受到破坏。如果您输入了密码,请更改它!   如果您提交了密钥,请生成一个新密钥。

     

本文告诉您如何使敏感数据无法提交   从您的GitHub存储库中的任何分支或标签中获取。但是,这很重要   请注意,这些提交仍可以在以下版本的任何克隆或分支中访问:   您的存储库,直接通过它们在GitHub上的缓存视图中的SHA-1散列,   以及通过任何引用它们的拉取请求。你什么也做不了   有关存储库中现有克隆或分支的信息,但您可以永久使用   删除所有存储库的缓存视图,并通过以下方式在GitHub上提取请求   联系GitHub支持。

因此,为了使旧提交不再以合理的方式出现在API中 时间范围内,唯一的选择是:

警告:虽然前一个选项更快,但它也会删除 Wiki 问题评论


注意:对于以下内容的含义有更全面的解释 悬空提交在这里:

https://stackoverflow.com/a/32840254/10095231

答案 1 :(得分:1)

我会为此使用git bfg。

效果很好,并且易于使用。它将完全删除您需要从git历史记录中删除的内容。

Git BFG Docs

相关问题