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

Move commits from master onto a branch using git

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

假设我在Master中有以下承诺链:

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

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

  • 我该怎么做?
  • 我可以将commit 2和3移动到一个单独的分支以备将来参考(说它们毕竟没有那么糟糕)并继续在master上从commit 1开始工作吗?

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

所以回答"Git中的"Git重置"和"Git签出"有什么区别?"对那种操作很有指导意义

alt text

一个git reset --hard HEAD~2也会做同样的事情(不需要先为Commit1取回sha1)。

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

实际上,达里恩在评论中提到(关于将Commit2Commit3转移到另一个分支机构):

Accidentally committed to the wrong branch, this let me move it, did:

1
2
3
git checkout correctbranch
git rebase tmp
git branch -d tmp

这在这里起作用,因为初始分支已重置为Commit1,这意味着git rebase tmp将在Commit1之后重放每个提交(因此这里Commit2Commit3)到新的"correctbranch"。