我们想要撤消最近推送到 origin master 的最后 2 个提交。在 TortoiseGit 中,我们可以查看历史记录,并点击倒数第3个提交,选择"将 master 重置为此版本",我们猜测这意味着恢复到该版本。
但是,当您选择此选项时,您必须从以下三个选项中选择一个:
- 软重置 - 不更改工作树和索引。
- 混合重置 - 不更改工作树,重置索引。
- 硬重置 - 重置工作树和索引。
不幸的是,我们不知道应该选择这三个选项中的哪一个 - 我们只想撤消最近的两个提交并回到以前的版本。
下一个问题是,这个操作发生在远程 origin、您的仓库、还是您的工作目录,或者这三个组合?例如,撤消后是否需要进行提交和推送,或者它会为您完成这些操作?
我们猜测 HARD 是我们想要的 - 它将恢复存储库(不确定是哪个)和我们本地的源代码到之前的某个版本。如果是这样,那么为什么它不是默认设置,其他两个选项的用例是什么?无论您是想还原还是不还原,如果您只还原远程存储库而不还原本地工作文件,则会处于混乱的状态。
我们没有任何本地修改过的文件。
请注意,我们非常需要一个不会破坏 Git 的解决方案(我们以前曾经破坏了 Git 并不得不创建一个新的仓库)。也许有其他可能的方法,例如检出以前的版本,然后在最新版本上进行检查,但我们不知道如何操作。
我们可以像下面这样做:
git checkout [revision]
那么我们如何告诉git,我们想将这个版本作为新的主版本或用此替换主版本呢? 我猜我们不能只是提交(commit),因为我们不再处于主版本(head)上。另外,如果您检出先前的版本,并进行修改并提交(commit),您提交(commit)的是什么内容以及提交(commit)到哪里?
我阅读了https://www.atlassian.com/git/tutorials/undoing-changes ,但它没有解决本地和远程repo之间的关系。如果要撤消的提交(commit)都被推送到远程origin主版本,那么现在需要回滚(恢复)远程origin、本地repo和工作目录 - 所有3个位置都必须还原到3个提交(commit)之前的状态。我们并不真正关心是使用重置(reset)还是还原(revert) - 我们只需要一种适用于所有3个位置的方法。
可能正确的步骤是像这样:
git status (we are on master with a clean working dir)
git git revert HEAD~2
git commit -m "revert"
git push origin mater
但是我们在示例中从未见过这组步骤,如果可能的话,我们宁愿使用Tortoise Git 进行操作。