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

git reset --hard <commit-hash>

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

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


当前回答

如果你想要一个以前版本的文件,我建议使用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

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

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

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

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

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

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

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

如果你想要一个以前版本的文件,我建议使用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