I’m trying to learn how to use Git effectively and I’m wondering how I should (good practice/bad practice?) solve the following case:
Say I have the following chain of commits in master:
- Initial commit
- Commit 1
- Commit 2
- Commit 3
Then I realize that what’s done in the last two commits is completely wrong and I need to start from Commit 1 again. Questions:
- How should I do that?
- Can I move Commit 2 and 3 to a separate branch to keep for future reference (say they weren’t that bad after all) and continue working from Commit 1 on master?
The SO answer “What’s the difference between ‘git reset’ and ‘git checkout’ in git?” is quite instructive for that kind of operation
A
git reset --hard HEAD~2would do the same thing (without needing to get back the SHA1 forCommit1first).Since
Commit2andCommit3are still reference by a Git ref (here a branch), you can still revert to them anytime you want (git checkout tmp).Actually, Darien mentions in the comments (regarding moving
Commit2andCommit3to another branch):This works here since the initial branch has been reset to
Commit1, which means thegit rebase tmpwill replay every commit afterCommit1(so hereCommit2andCommit3) to the new ‘correctbranch‘.