62

我正在尝试学习如何有效地使用 Git,我想知道我应该如何(好的做法/坏的做法?)解决以下情况:

假设我在 master 中有以下提交链:

  • 初始提交
  • 提交 1
  • 提交 2
  • 提交 3

然后我意识到在最后两次提交中所做的事情是完全错误的,我需要再次从 Commit 1 开始。问题:

  • 我该怎么做?
  • 我可以将 Commit 2 和 3 移动到单独的分支以供将来参考(说它们毕竟不是那么糟糕)并继续从 Commit 1 在 master 上工作吗?
4

1 回答 1

76
git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1

SO的答案“ git中的'git reset'和'git checkout'有什么区别? ”对于这种操作很有指导意义

替代文字

Agit reset --hard HEAD~2会做同样的事情(不需要先取回 SHA1 Commit1)。

由于Commit2并且Commit3仍然被 Git 引用(这里是一个分支)引用,您仍然可以随时恢复到它们(git checkout tmp)。


实际上,Darien在评论中提到(关于移动Commit2Commit3另一个分支):

不小心提交到错误的分支,这让我移动它,做到了:

git checkout correctbranch
git rebase tmp
git branch -d tmp

这在这里有效,因为初始分支已重置为Commit1,这意味着将在(所以这里 和)git rebase tmp之后重播每个提交到新的“ ”。Commit1Commit2Commit3correctbranch

于 2010-09-15T15:26:42.393 回答