我正在尝试学习如何有效地使用 Git,我想知道我应该如何(好的做法/坏的做法?)解决以下情况:
假设我在 master 中有以下提交链:
- 初始提交
- 提交 1
- 提交 2
- 提交 3
然后我意识到在最后两次提交中所做的事情是完全错误的,我需要再次从 Commit 1 开始。问题:
- 我该怎么做?
- 我可以将 Commit 2 和 3 移动到单独的分支以供将来参考(说它们毕竟不是那么糟糕)并继续从 Commit 1 在 master 上工作吗?
我正在尝试学习如何有效地使用 Git,我想知道我应该如何(好的做法/坏的做法?)解决以下情况:
假设我在 master 中有以下提交链:
然后我意识到在最后两次提交中所做的事情是完全错误的,我需要再次从 Commit 1 开始。问题:
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在评论中提到(关于移动Commit2
和Commit3
另一个分支):
不小心提交到错误的分支,这让我移动它,做到了:
git checkout correctbranch
git rebase tmp
git branch -d tmp
这在这里有效,因为初始分支已重置为Commit1
,这意味着将在(所以这里 和)git rebase tmp
之后重播每个提交到新的“ ”。Commit1
Commit2
Commit3
correctbranch