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

时间:2013-11-07 21:03:12

标签: git github

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

我想将主分支恢复到25提交状态。

我不想使用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

2 个答案:

答案 0 :(得分:6)

是的,您可以(从顶级目录):

git revert --no-commit <relevant SHA>..

然后你正常提交并推送。

请注意,您可以使用git checkout <relevant SHA> -- .获取类似内容,但这不会删除自相关提交后添加的文件。

答案 1 :(得分:2)

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

git reset --hard $commit
git reset --soft '@{1}'
git commit

这意味着:

  1. 将当前分支更改为指向$commit。使索引和工作副本看起来像$commit
  2. 将当前分支更改为指向运行第一个命令之前的分支,但将索引和工作副本保留为$commit。这应该会让您进行必要的更改以恢复$commit
  3. 提交。