我想放弃commit <commit-hash>后所做的所有更改。 于是我做了:

git reset --hard <commit-hash>

现在我想对我的遥控器做同样的事情。我该怎么做呢?我已经做了一些提交(和推)后<commit-hash>,我只是想放弃他们所有。只是在这过程中出了严重的问题我不想让事情变得更糟。;(

我基本上想把我的原点/主节点倒回到<commit-hash>


当前回答

假设你的分支在这里和远程都叫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为例,它说“不允许重写分支历史”。有一个名为允许重写分支历史的复选框,您必须勾选。

其他回答

做一件事, 获取提交的SHA号。比如87c9808然后,

移动你自己,即你的头到指定的提交(通过做 Git重置-硬89cef43//在这里提到你的数字) 接下来在一个随机文件中做一些更改,这样git会要求你在本地提交,然后远程提交 因此,您现在需要做的是。 应用变更后 Git commit -a -m "trial commit" 现在推动以下提交(如果已经在本地提交) 通过 Git push origin master 现在少管所要问你的是

错误:无法推送一些引用 “https://github.com/YOURREPOSITORY/AndroidExperiments.git” 提示:更新被拒绝,因为你当前分支的提示落后了 提示:它的远程对等体。集成远程更改(例如: 提示:'git pull…'),然后再推一次

所以现在你能做的就是

Git push—force origin master

因此,我希望它能起作用:)

Sourcetree:将远程端重置为某个提交

如果你推送了一个错误的提交到你的远程(origin/feature/1337_MyAwesomeFeature),如下图所示

转到Remotes > origin > feature > 1337_MyAwesomeFeature 右键单击并选择“Delete origin/feature/1337_MyAwesomeFeature”(如果您想要备份,可以更改名称并跳过步骤4)。 点击“强制删除”和“确定”。

选择旧的提交并选择“重置当前分支到此提交” 选择你想要的模式(如果你不想要最后的改动,选择Hard),然后选择OK。

将这个commit推到一个新的origin/feature/1337_MyAwesomeFeature 您的本地特性分支和远程特性分支现在都在前面的(您选择的)提交上

我最近也遇到了同样的问题,我通过两步解决了这个问题:

用git Reset将其重置为本地git——hard HEAD~1这里HEAD~1是最近提交的。 将其强行推到所需的分支git Push -f origin main。

就是这样。

如果您的分支不是开发或生产分支,实现这一点的最简单方法是在本地重新设置某个提交,并从那里创建一个新分支。你可以使用:

git 结帐 000000

(其中000000是你想要去的提交id),然后简单地创建一个新分支:

Git远程添加[name_of_your_remote]

然后你可以创建一个新的PR,一切都将正常工作!

假设你的分支在这里和远程都叫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为例,它说“不允许重写分支历史”。有一个名为允许重写分支历史的复选框,您必须勾选。