从存储库历史记录中删除提交 [重复]
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 G
和squash 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+F
和G'=G+H
。
以后的提交会受到影响吗?例如,如果我从A-B-C-D
开始,然后将C
压缩为B
。结果是A-B'-D
还是A-B'-D'
?
后者。变基总是会在第一次更改提交后重写整个历史记录,即使您只更改提交消息。
这很可悲,但我理解。难道没有办法将提交压缩到 next 中吗?这对我来说很重要,因为这两个提交的作者不同。以上是关于从存储库历史记录中删除提交 [重复]的主要内容,如果未能解决你的问题,请参考以下文章