从SHA-1列表的列表中批量删除远程提交

时间:2018-11-27 02:49:49

标签: git gitlab commit rebase

我想从我的回购记录中删除很多提交。通过删除,我的意思是我希望它们从我在GitLab上的远程存储库中完全消失。纯粹而简单。没有历史,没有踪迹。 我知道不建议这样做,但是它们是重复的,并且包含敏感信息。

我有一个这样的SHA-1列表:

3816b7652c4147216293d1fac3dee2f377417979
0f0a95f4d15a2a8d176f548bde47259956cbb859
90cd0dc615d6928460861da70f024039ce18e06f
f8a371aff5301c69825dbd6aec7898fb2c122a79
619dd79966ef4636134bc55f1ef3f03f94cb9dd4
a556b303021c2da0094d42605ce426ef9e74a765  
.  
.
.

它们是我想要消失的提交。它们可以在master分支或其他分支上。 git rebase -i <SHA>^可能是一个很好的工具,我真的不介意手动查找与列表匹配的行。但是,当我保存git-rebase-todo文件时,出现合并错误。我不想被那些打扰,我只想删除这些提交,就好像它们根本不存在一样。就是这样。

1 个答案:

答案 0 :(得分:2)

您需要以下各项的组合:

  • git replace替换其父项的提交(如果父项不属于您的列表),as seen here;
  • git filter branch以使该替换永久化(顺便更改过程中其余所有提交的sha1)

需要编写脚本,因为这不是Git的本机功能。