移动使用Git

问题描述:

我想学习如何有效地使用Git和我不知道我应该如何(?好的做法/糟糕的做法)解决以下情况下,从主提交到分支有提交的下列链在主:移动使用Git

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

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

  • 我应该怎么做?
  • 我可以将提交2和3移到单独的分支以备将来参考(说他们毕竟不是那么糟糕),并继续从提交1到主要工作?

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会做同样的事情(而不需要找回的SHA1首先是Commit1)。

由于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'。

+0

谢谢!只是一个观察:在gitk tmp分支不显示。它是否应该这样做,因为Commit1对于两个分支都很常见? – Paul 2010-09-15 15:46:42

+5

@保罗:你尝试过一个“'gitk --all'”吗? – VonC 2010-09-15 15:47:23