从存储库历史记录中删除提交 [重复]

Posted

技术标签:

【中文标题】从存储库历史记录中删除提交 [重复]【英文标题】:Remove Commit from Repository History [duplicate] 【发布时间】:2012-12-14 18:18:33 【问题描述】:

可能重复:How to delete a ‘git commit’

知道这会改变历史记录,我想从存储库的历史记录中删除一些意外提交。我希望所有其他提交保留其存储库的状态。所以我要删除的提交的更改将被它们之后的提交覆盖。

我怎样才能在 Git 中做到这一点,我怎样才能将它也应用到或仅应用到 Github 上的存储库?

【问题讨论】:

【参考方案1】:

如果我理解正确,“挤压”就是你想要的。

  -A-B-C-D-E-F-G-H

鉴于上述历史记录,您应该在要压缩的第一个提交之前选择提交。假设您要将 F 和 E 压缩为 D,H 压缩为 G,所以第一个之前的提交是 C。

  git rebase -i C

您将看到一个编辑器,其中包含一个包含如下内容的文本文件:

pick D
pick E
pick F
pick G
pick H

修改为:

pick D
squash E
squash F
pick G
squash H

您将被要求查看新提交的提交消息,

生成的历史将如下所示:

  -A-B-C-D'-G'

请注意您总是将较新的提交压缩到较旧的提交中,反之亦然。因此pick Gsquash H。把它想象成在你的历史继续前进之后修改一个提交。

PS:要将其放入您的 GitHub 存储库,您必须强制推送 git push -f origin(假设 origin 是您的 GitHub 远程)。

PPS:有关详细信息,请参阅man page of git-rebase。

【讨论】:

那我的历史会变成A-B-C-D-G? 这是-A-B-C-D'-G',我编辑了我的答案。但是D'=D+E+FG'=G+H 以后的提交会受到影响吗?例如,如果我从A-B-C-D 开始,然后将C 压缩为B。结果是A-B'-D 还是A-B'-D' 后者。变基总是会在第一次更改提交后重写整个历史记录,即使您只更改提交消息。 这很可悲,但我理解。难道没有办法将提交压缩到 next 中吗?这对我来说很重要,因为这两个提交的作者不同。

以上是关于从存储库历史记录中删除提交 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何删除旧的 git 历史记录?

从存储库历史记录中删除大文件后,Git 存储库仍然很大

如何在GIT Rebase Interactive Squash之后删除远程存储库上的历史记录提交消息

从 git 存储库中删除文件(历史记录)

在远程存储库上提交历史记录

从 Git 历史记录中删除大文件