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

问题描述 投票:24回答:3

我做了一些非常愚蠢的事情。我在代码中输入了一个诅咒字,然后将代码推送到了master分支上。在那之后,我又推了几次,这样人们就不会再拉坏东西了,但是我仍然可以在提交历史中找到诅咒之词。

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

谢谢

git git-commit
3个回答
27
投票

一旦推送到存储库,您实际上就不想更改历史记录。但是,如果您完全确定自从您的违犯提交以来没有人从存储库中提取/获取任何东西,则您有2个选择。

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

[如果您只想编辑该提交,并保留它之后的提交,请执行git rebase -i ABC~。这将启动您的编辑器,从有问题的提交开始,显示您的提交列表。将标记从“ pick”更改为“ e”,保存文件并关闭编辑器。然后对文件进行必要的更改,并执行git commit -a --amend,然后执行git rebase --continue。 [git push -f]全部跟随。

我想重复一遍,这些选项仅在nobody完成包含有害提交的拉取或提取操作时才可用。如果有,执行这些步骤只会使情况变得更糟。


6
投票

如果仅在本地PC上(或没有人签出您的更改):

1)使用:

git log

查找要删除的提交。复制哈希(较长的时间:e8348ebe553102018c ...)。

2)使用:

git rebase -i your_commit_hash_code_comes_here〜

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

交互式git rebase还可让您修复损坏的提交-无需删除它。

如果您将更改推送到服务器或某人已经进行了更改-永远不要更改历史记录-这会对您的团队造成严重问题。


-5
投票

[否,Git仅向历史记录添加更改。阅读this文章以了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.