首页 > 解决方案 > 删除 git/github 提交历史(以前的),同时保持最新的提交

问题描述

我目前正在进行一个名为“3”的提交(比如说)。以前我有名为“2”、“1”的提交。无意中,我在提交“2”时添加了一些密钥。然后我从我的工作区中删除了该文件,然后以名称“3”提交。如何在保留最新提交“3”的同时从 git 和 github 历史记录中删除提交“2”。我只想拥有提交“3”时存在的所有文件/更改,并且我的最后一次提交为“1”。

我在这里和那里搜索并找到了关于rebasereflog但无法清楚地了解如何解决这个特定问题。

已编辑。我把他们三个都推到了github。

标签: gitgithub

解决方案


如果你还没有推送,并且你也确定你不想要第二次提交中的任何东西,那么交互式 rebase 就会派上用场:

# from your branch
git rebase -i HEAD~3

这将打开一个屏幕,显示最近 3 次提交,从最旧到最新:

pick d83pcnd commit 1
pick 3jsu83m commit 2
pick w2kx9wk commit 3

从编辑器中,只需删除第二次提交的行,留下:

pick d83pcnd commit 1
pick w2kx9wk commit 3

现在退出编辑器并保存,这应该会自动启动 rebase。由于第三次提交的工作在第一次提交之上重放,您可能会遇到合并冲突。

请注意,由于在此假设下,您还没有从第二次提交开始推送,您可以只进行常规推送:

# from your branch
git push origin your_branch

现在是棘手的部分。如果您已经将第二次提交推送到远程,那么您仍然可以执行上述步骤,但在最后执行强制推送。 但是,请记住,其他人可能已经看到了密钥。所以,如果你已经推了,那猫就从袋子里出来了,你可能应该重新生成钥匙。


推荐阅读