使用Git将Commit从主分支移动到一个分支上

62

我正在努力学习如何有效地使用Git,我想知道在以下情况下应该采取什么方案(好的惯例/不良惯例?):

假设我在主分支中有以下提交记录链:

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

然后我意识到最后两个提交所做的完全是错误的,我需要重新从提交1开始。问题:

  • 我应该如何做?
  • 我可以将提交2和3移到一个单独的分支中以备将来参考(例如它们并不那么糟糕),并在主分支上继续从提交1工作吗?
1个回答

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

从stackoverflow获得的答案“What's the difference between 'git reset' and 'git checkout' in git?"对这种操作非常有指导意义。

alt text

git reset --hard HEAD~2将完成同样的操作(无需先获取Commit1的SHA1)。

由于Commit2Commit3仍然被Git ref(这里是一个分支)引用,所以您随时都可以还原它们(git checkout tmp)。


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

  

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

git checkout correctbranch
git rebase tmp
git branch -d tmp

这里的操作是基于初始分支已经被重置为Commit1, 这意味着git rebase tmp会将Commit1之后的每个提交(也就是Commit2Commit3)重新应用到新的'correctbranch'上。


谢谢!只是观察:在gitk中,tmp分支没有显示。既然Commit1是两个分支的公共点,那么它不应该显示吗? - Paul
5
@Paul: 你尝试过使用 " gitk --all " 命令吗?我可以为你解释一下它的用法。 - VonC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接