我在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
答案 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
这意味着:
$commit
。使索引和工作副本看起来像$commit
。$commit
。这应该会让您进行必要的更改以恢复$commit
。