首页 > 解决方案 > 撤消更改两次提交并进入干净状态。

问题描述

假设我有一个看起来像这样的提交历史:

A <- B <- C

我目前在 C 上。我讨厌我的提交 B 和 C,并且我想以干净的 staging 和没有更改的方式回到 A。我想要 A 的状态。我如何以最有效的方式做到这一点。我目前正在这样做:

git revert --no-commit B
git revert --no-commit A
git checkout .

这也使得没有回复提交/没有新提交显示我的回复。说我想要这个。我该怎么办?

有没有更好的办法?

标签: git

解决方案


git reset --hard A

这将带你回到修订版 A,它非常接近于说“b 和 C 没有发生”。此外,当前分支将开始指向 A,因此请谨慎使用。

如果您想要的是遵循 C (A <- B <- C <- D) 的新修订版 D,使其具有与 A 相同的内容,那么您可以试试这个:

git checkout A -- . # take back content of the whole project to how A was
git commit -m "Going back to revision A"

如果您想使用不创建提交的还原来执行此操作:

git revert --no-commit A..C
git commit -m "going back to A"

或者:

git revert --no-edit A..C
git reset --soft HEAD~2 # Moving branch pointer to C keeping everything else as-is
git commit -m "going back to A"

推荐阅读