4

我在 Github 上有一个 Git 存储库和一个遥控器。(请不要编辑它在 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
4

2 回答 2

6

Yes, you can do (from the top-level directory):

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

You then commit as normal and push.

Note that you can get something similar using git checkout <relevant SHA> -- ., but that this doesn't delete files that have been added since the relevant commit.

于 2013-11-07T21:06:35.060 回答
2

git revert当然是更快的方式来做到这一点,但值得一提的git reset是,它比仅仅更灵活--hard

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

这表示:

  1. 将当前分支更改为指向$commit. 使索引和工作副本看起来像$commit.
  2. 将当前分支更改为指向运行第一个命令之前的位置,但让索引和工作副本看起来像$commit. 这应该会给您留下恢复到$commit.
  3. 犯罪。
于 2013-11-07T21:36:56.827 回答