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

git reset --hard <commit-hash>

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

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


当前回答

让我们假设你的分支在本地和远程都叫master,你的远程叫origin,你可以这样做:

Git reflog来获取所有的提交历史,你的提交哈希格式如下:e34e1ff

git reset --hard <commit-hash>

git push -f origin master

其他回答

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

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

就是这样。

如果你想要一个以前版本的文件,我建议使用git签出。

git checkout <commit-hash>

这样做将把你送回过去,它不会影响你的项目的当前状态,你可以来到主线 Git结账主线

但是当您在参数中添加一个文件时,该文件将返回给您 从以前的时间到您当前的项目时间,即您当前的项目发生了更改,需要提交。

git checkout <commit-hash> -- file_name
git add .
git commit -m 'file brought from previous time'
git push

这样做的好处是它不会删除历史记录,也不会恢复特定的代码更改(git revert)。

点击这里查看更多信息https://www.atlassian.com/git/tutorials/undoing-changes#git-checkout

让我们假设你的分支在本地和远程都叫master,你的远程叫origin,你可以这样做:

Git reflog来获取所有的提交历史,你的提交哈希格式如下:e34e1ff

git reset --hard <commit-hash>

git push -f origin master

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

git 结帐 000000

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

Git远程添加[name_of_your_remote]

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

对于之前的答案,我的观点是:如果

git push --force <remote> <the-hash>:<the remote branch>

仍然不工作,您可能需要编辑<your-remote-repo>。Git /配置文件的接收部分:

[receive]
  #denyNonFastforwards = true
  denyNonFastforwards = false