如何在 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^4
或git 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 次提交?的主要内容,如果未能解决你的问题,请参考以下文章