从历史中删除提交

我在代码中输入了一个密码,然后把代码推到主分支上。在那之后我又推了几次,这样人们就不会拉坏东西了,但是我仍然可以在提交历史中找到关键词。

我不想将该文件添加到 .gitignore,因为我们需要该文件。

有办法从历史中删除提交吗?

179756 次浏览

一旦你开始回购,你就不会想要改变历史了。然而,如果你是绝对的 当然,自从你犯错提交以来没有人从回购中提取,你有两个选择。

如果您希望完全删除“ bad”提交(以及之后的每个提交) ,那么执行 git reset --hard ABC(假设 ABC是“ bad”提交的兄弟提交的散列值——您希望将其视为该分支的新头提交的散列值)。然后做一个 git push --force(或 git push -f)。

如果您只是想编辑该提交,并保留之后的提交,那么执行 git rebase -i ABC~。这将启动您的编辑器,显示您的提交列表,从违规的那个开始。将标志从“ pick”更改为“ e”,保存文件并关闭编辑器。然后对文件进行必要的更改,并执行 git commit -a --amend,然后执行 git rebase --continue。接下来是 git push -f

我想重复一遍,这些选项只有在 没人已经完成包含您的违规提交的拉取操作时才可用。如果他们这样做了,那么采取这些措施只会让事情变得更糟。

如果它只在你的本地电脑上(或者没有人检查你的修改) :

  1. git log
    

复制 hash (长序列,如: e8348ebe553102018c...)。

  1. git rebase -i [hash]~
    
    
    : for example
    git rebase -i e8348~
    

只需删除不需要的提交并保存文件。

交互式 git rebase 还可以让您修复破碎的提交——没有必要删除它。

如果您将更改推送到服务器,或者有人已经得到了您的更改——永远不要更改历史记录——这将给您的团队带来严重的问题。

这对我有用:

  1. git log查找要删除的提交并复制其散列
  2. 打开文本编辑器的 git rebase -i <commit_hash>~
  3. 在文本编辑器中,为您的特定提交从 pick切换到 drop

我最近和一个团队一起工作,发现 Git 有解决这个问题的方法

都在这个链接上

Https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository

使用 git-filter-repo BFG Repo-Cleaner

这里有一个很酷的视频

Https://www.youtube.com/watch?v=z8tioyg_oho