使用git将提交从主服务器移动到分支上

使用git将提交从主服务器移动到分支上,git,commit,git-branch,git-reset,Git,Commit,Git Branch,Git Reset,我正在努力学习如何有效地使用Git,我想知道我应该如何(好的做法/坏的做法?)解决以下情况: 假设我在master中有以下提交链: 初始提交 提交1 承诺2 承诺3 然后我意识到在最后两次提交中所做的是完全错误的,我需要再次从提交1开始。问题: 我该怎么做 我是否可以将Commit 2和Commit 3移动到一个单独的分支以备将来参考(说它们并没有那么糟糕)并继续从Commit 1开始在master上工作 所谓的“答案”对这种操作很有指导意义 git重置--hard HEAD~2也会做

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

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

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

  • 我该怎么做
  • 我是否可以将Commit 2和Commit 3移动到一个单独的分支以备将来参考(说它们并没有那么糟糕)并继续从Commit 1开始在master上工作
所谓的“答案”对这种操作很有指导意义

git重置--hard HEAD~2也会做同样的事情(无需先拿回提交1的SHA1)

由于
Commit2
Commit3
仍然是Git ref(这里是一个分支)的引用,因此您仍然可以随时恢复到它们(
Git checkout tmp


实际上,在评论中提到(关于将
Commit2
Commit3
移动到另一个分支机构):

无意中犯了错误,这让我动了一下,做了:


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

谢谢!只是一个观察:在gitk中,tmp分支没有显示。它不应该这样做吗,因为Commit1对这两个分支来说都很常见?@Paul:你试过“
gitk--all
”吗?
git branch tmp            # mark the current commit with a tmp branch
git reset --hard Commit1  # revert to Commit1
git checkout correctbranch
git rebase tmp
git branch -d tmp