如何在 Github 和本地删除最后 n 次提交?

Posted

技术标签:

【中文标题】如何在 Github 和本地删除最后 n 次提交?【英文标题】:How to delete the last n commits on Github and locally? 【发布时间】:2012-04-26 13:33:06 【问题描述】:

我正在尝试从我的一个 GitHub 存储库中删除最后 2 个提交。我已经按照here 的建议进行了尝试:git push -f origin HEAD^^:master。似乎它可以工作,因为最后两个提交已被删除。

然后我使用 git rebase -i HEAD~2 从本地存储库中删除了它们。我删除了与这些提交相关的行,并通过 git log 检查它们是否已正确删除。

之后,我在本地存储库中进行了一些更改,进行新的提交,然后推送到 GitHub。问题是,在我的 GitHub 帐户中,我尝试删除前两个提交。

我认为问题出在我的本地存储库中,因为如果我将 Github 存储库克隆到本地并在此处进行一些更改,当我推送新提交时,这些旧提交不会推送到 GitHub。

【问题讨论】:

【参考方案1】:

要在本地删除最后两个提交,我建议使用:

git reset --hard HEAD^^

变基是一个完全不同的操作,在这里对你没有帮助。

【讨论】:

如果您已经将此更改推送到远程存储库。您可以使用 git push -f 将其删除 你能概括一下最后 n 次提交吗? @user_19 您可以执行git reset --hard HEAD^4git reset --hard HEAD~4 之类的操作。但是,如果您的历史记录包含合并,事情可能会变得有点复杂。您可以在相应的部分here 中找到有关指定修订的更多信息。 如果我想删除最后 7 个提交然后呢? HEAD后是否需要放7次^...请清除我 @GaganGami,我想你会做git reset --hard HEAD~7,但如果我错了,请纠正我。【参考方案2】:

以下对我有用

git reset HEAD~n

它从本地 repo 中删除最后一个 n 提交,因为 HEAD^ 只删除一个。如果您需要从远程删除这些更改,您可能需要强制推送,因为您将落后于远程。

git push -f origin <branch>

【讨论】:

【参考方案3】:

如果您想删除 2(两次)最后一次提交,有一个简单的命令可以做到这一点:

git reset --hard HEAD~2

您可以将2 更改为您想要删除的任意数量的最后提交。

要将此更改推送到远程,您需要使用 force (-f) 参数执行git push

git push -f

但是,我不建议使用-f--hard 选项执行任何git 命令,如果远程(Github ) 此提交之后您要删除。在这种情况下,请始终使用git revert

【讨论】:

我所做的更改会保留吗? @SymfonyUser,没有。当您发出hard 命令时,您松开 这两个提交。如果要保存更改,请在应用重置之前创建这些提交的 diff 文件。 @ZuhayerTahir 如果您只想撤消最后 5 次提交的 提交,那么只需执行 git reset HEAD~5(不要使用 hard)。这样,您将获得分阶段状态(即未提交)的更改。对我来说,请参阅this answer。 @Honey 感谢您的回复。我得出了同样的结论。 请注意,我使用这种方法丢失了未提交的工作。除此之外它还有效。【参考方案4】:

删除最后 n 次提交:

git reset HEAD~n

如果您需要从远程删除这些更改,您可能需要强制推送,因为您将落后于远程。

git push -f origin <Branch Name>

【讨论】:

我会在git reset HEAD~n 中添加一个git stash,以便在完成最后一次提交后再次处于同一阶段,因此可以从该提交中获得git pull

以上是关于如何在 Github 和本地删除最后 n 次提交?的主要内容,如果未能解决你的问题,请参考以下文章

进行后续更改后如何将最后一次提交推送到 Github?

徐炜淇第二次作业

「git」如何删除github上的文件但保留在本地

git如何回滚最后一次提交

Git - 如何返回最后一次提交并删除所有未提交的文件?

当我的分支领先于 master 5 次提交时,如何在提交中删除太大的文件