使用git将提交从master移到分支上

时间:2010-09-15 15:15:21

标签: git commit git-branch git-reset

我正在努力学习如何有效地使用Git,我想知道我应该如何(良好做法/不良做法?)解决以下案例:

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

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

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

  • 我该怎么做?
  • 我可以将提交2和提交3移到一个单独的分支以备将来参考(毕竟它们并不是那么糟糕)并继续使用提交1在主设备上工作吗?

1 个答案:

答案 0 :(得分:73)

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

SO回答“What's the difference between 'git reset' and 'git checkout' in git?”对于这种操作非常有启发性

alt text

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

由于Commit2Commit3仍由Git引用(此处为分支)引用,您仍可以随时恢复它们(git checkout tmp)。


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

  

意外地犯了错误的分支,这让我移动它,做了:

git checkout correctbranch
git rebase tmp
git branch -d tmp

这可以在这里工作,因为初始分支已重置为Commit1,这意味着git rebase tmp将在Commit1之后重播每次提交(所以这里Commit2和{{1 }})到新的'Commit3'。

相关问题