我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:
git reset --hard <commit-hash>
现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(
我基本上想把我的原点/主节点倒回到<commit-hash>
我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:
git reset --hard <commit-hash>
现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(
我基本上想把我的原点/主节点倒回到<commit-hash>
当前回答
我用这个命令解决了你的问题:
git reset --hard <commit-hash>
git push -f <remote> <local branch>:<remote branch>
其他回答
我最近也遇到了同样的问题,我通过两步解决了这个问题:
用git Reset将其重置为本地git——hard HEAD~1这里HEAD~1是最近提交的。 将其强行推到所需的分支git Push -f origin main。
就是这样。
在GitLab上,在执行此操作之前,您可能必须将分支设置为未保护状态。可以在[repo] > Settings > Repository > Protected Branches中设置。那么马克回答的方法就有用了。
git reset --hard <commit-hash>
git push -f origin master
假设你的分支在这里和远程都叫master,你的远程叫origin,你可以这样做:
git reset --hard <commit-hash>
git push -f origin master
但是,如果其他人正在使用您的远程存储库并已提取您的更改,则应该避免这样做。在这种情况下,最好恢复您不想要的提交,然后按正常方式进行推送。
更新:您在下面解释了其他人已经提取了您所推送的更改,因此最好创建一个新的提交来恢复所有这些更改。Jakub narylbski的回答很好地解释了你的选择。哪种方法最方便取决于您想要恢复多少次提交,以及哪种方法对您最有意义。
从你的问题中,很明显你已经使用了git reset——很难重置你的主分支,你可能需要使用git reset——hard ORIG_HEAD将你的分支移回之前的位置。(就像git重置一样——很难,确保git状态是干净的,你在正确的分支上,并且你知道git reflog是一个恢复明显丢失提交的工具。)你还应该检查ORIG_HEAD是否指向正确的提交,使用git show ORIG_HEAD。
故障排除:
如果你收到“!”a60f7d85 -> master(预接收钩子拒绝)"
然后,您必须允许为特定分支重写分支历史记录。以BitBucket为例,它说“不允许重写分支历史”。有一个名为允许重写分支历史的复选框,您必须勾选。
我用这个命令解决了你的问题:
git reset --hard <commit-hash>
git push -f <remote> <local branch>:<remote branch>
如果您的分支不是开发或生产分支,实现这一点的最简单方法是在本地重新设置某个提交,并从那里创建一个新分支。你可以使用:
git 结帐 000000
(其中000000是你想要去的提交id),然后简单地创建一个新分支:
Git远程添加[name_of_your_remote]
然后你可以创建一个新的PR,一切都将正常工作!