在最近克隆的项目中,我刚刚对我的本地main
分支进行了无意的更改/提交。(我本来打算为更改创建并签出一个新的功能分支,但我没有想到 :-))。
意识到自己的错误后,我恢复了更改。虽然这确实将我的代码恢复到了更改之前的状态,但运行git status
仍然表明我的分支是原点(即托管存储库)之前的提交。
没问题,我想:我只要做一个git reset --hard
。不,这没用——我的控制台仍然显示我领先于原点。我也试过了git reset --hard head
。还是没运气。在这个过程中我多次运行git pull origin main
,但没有任何效果。
我的问题是:如何清除我的 git 历史记录中的这些提交,以便git status
显示我与原点完全同步?
该命令
git reset --hard HEAD
只会将 HEAD 重新分配给其自身并删除任何已暂存或未暂存的更改。您想使用命令
该参数
HEAD~2
将您的 HEAD 引用向后移动两次提交(不需要的提交和恢复提交)。完成后,git status
应该显示与原点完全同步。当您在分支上创建新的提交时
main
,您将本地历史记录移至远程main
历史记录的前面一次提交。之后,当您执行恢复时,您实际上在本地添加了另一个新提交
main
,其中包含上次提交引入的反向更改。这就是为什么您的工作目录的内容再次像您意外提交之前一样,但历史记录比远程上的要早(2 次提交)。此外,执行
git reset --hard HEAD
只会将您的索引和工作目录重置为 HEAD symref 指向的提交(即main
的 head 提交)。这就是为什么什么都没有改变。您只需将您的索引和工作目录重置为当前情况。根据git reset --hard
文档:此时,如果您想恢复
main
分支上的历史记录,同时在新分支上保留新的提交,您可以执行以下操作:重置不起作用的原因是
main
是本地分支,你当前所在的分支指向的正是你所在的位置。因此,你可以重置为当前位置。HEAD
表示您当前所在的分支,在本例中翻译为main
。参见上文 :P您可以做的是重置为您的遥控器指向的主版本。
git reset --hard origin/main
(主要关于起源)git reset --hard @{u}
(您当前分支的上游分支)