Git - 从历史记录中删除提交

时间:2015-06-17 13:27:21

标签: git git-commit

我做了一件非常愚蠢的事。我在代码中输入了一个curseword,然后将代码推送到master分支上。之后我又推了几次,所以人们不会把坏事拉下来,但我仍然可以在提交历史中找到诅咒词。

有没有办法从历史记录中删除提交?编辑:我不想将文件添加到gitignore,因为我们需要该文件。

由于

4 个答案:

答案 0 :(得分:19)

这对我有用:

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

答案 1 :(得分:16)

一旦你推动回购,你真的不想改变历史。但是,如果您绝对确定,自您的违规提交以来没有人从回购中提取/取出,您有2个选项。

如果要完全删除提交(以及之后的每个提交),请执行git reset --hard ABC~(假设提交的哈希是ABC)。然后做一个git push -f

如果您只想编辑该提交,并保留其后的提交,请执行git rebase -i ABC~。这将启动您的编辑器,显示您的提交列表,从违规提示开始。从&#34;选择&#34;更改标志到&#34; e&#34;,保存文件并关闭编辑器。然后对文件进行必要的更改,然后执行git commit -a --amend,然后执行git rebase --continue。全部使用git push -f

我想再说一遍,如果 nobody 执行了包含违规提交的提取或提取,则这些选项仅适用于您。如果他们有,那么做这些步骤只会让事情变得更糟。

答案 2 :(得分:3)

如果它仅在您的本地PC上(或没有人检查您的更改):

1)使用:

  

git log

找到要删除的提交。复制哈希(long sqeuence,如:e8348ebe553102018c ......)。

2)使用:

  

git rebase -i your_commit_hash_code_comes_here

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

交互式git rebase可以让你修复破坏的提交 - 无需删除它。

如果您将更改推送到服务器或某人已经进行了更改 - 从不更改历史记录 - 则会给您的团队带来严重问题。

答案 3 :(得分:-2)

不,Git只会添加对历史记录的更改。 有关详情,请参阅this文章。