如何在不使用重置的情况下将Git repo及其Github remote恢复到以前的提交?

如何在不使用重置的情况下将Git repo及其Github remote恢复到以前的提交?,git,github,Git,Github,我在Github上有一个Git repo和一个遥控器。(请不要删掉它在Github上的事实。它是相关的,并且会对答案产生影响。谢谢。) 我想将主分支恢复到返回的状态 我不想使用git--reset hard…和git push-f,因为我不想删除历史记录 有什么方法可以让我告诉Git,有效地 “使我的工作副本中的所有内容与上次在此提交的内容完全相同,包括删除当时不存在的文件。” …然后提交该状态,然后将其推送到远程 我尝试了git revert,但结果如下 $ git revert --no-

我在Github上有一个Git repo和一个遥控器。(请不要删掉它在Github上的事实。它是相关的,并且会对答案产生影响。谢谢。)

我想将主分支恢复到返回的状态

我不想使用
git--reset hard…
git push-f
,因为我不想删除历史记录

有什么方法可以让我告诉Git,有效地

“使我的工作副本中的所有内容与上次在此提交的内容完全相同,包括删除当时不存在的文件。”

…然后提交该状态,然后将其推送到远程


我尝试了git revert,但结果如下

$ git revert --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529..
error: Commit e88336ec528bc87dd6df3df82280b0fbd8c5a38d is a merge but no -m option was given.
fatal: revert failed
然后尝试

$ git revert -m 1 --no-commit d3289a7ab82fd76386d99bdd2c5e6496ecc62529..
error: Mainline was specified but commit 84ccf1084d17d470ee03b89a7649c4a783f2b914 is not a merge.
fatal: revert failed
是的,您可以(从顶级目录)执行以下操作:

git revert--不提交。。
然后按正常方式提交并推送


请注意,您可以使用git checkout--.获得类似的结果,但这不会删除自相关提交后添加的文件。

git revert
当然是更快的方法,但值得一提的是,
git reset
--hard
更灵活:

git reset --hard $commit
git reset --soft '@{1}'
git commit
这意味着:

  • 将当前分支更改为指向
    $commit
    。使索引和工作副本看起来像
    $commit
  • 将当前分支更改为指向运行第一个命令之前的位置,但使索引和工作副本看起来像
    $commit
    。这将为您提供恢复到
    $commit
    所需的任何更改
  • 承诺

  • 这听起来很有希望。但我想撤销最后25次提交。我认为
    revert
    只还原用作参数的单个提交中的更改。我弄错了吗?等等。我明白了,
    。谢谢。我试过这个。代码没有返回到指定的“还原为提交”时的状态。您能说得更具体一些吗?我只对任意回购做了一个简单的测试,如果我对
    reset
    的理解不正确,我肯定想知道:)我检查了代码,从变量名等可以看出它没有处于预期状态。我可能犯了一个错误。
    git reset --hard $commit
    git reset --soft '@{1}'
    git commit