Move commits from master onto a branch using git

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?

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

    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~2 would do the same thing (without needing to get back the SHA1 for Commit1 first).

    Since Commit2 and Commit3 are 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 Commit2 and Commit3 to another branch):

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

    git checkout correctbranch
    git rebase tmp
    git branch -d tmp
    

    This works here since the initial branch has been reset to Commit1 , which means the git rebase tmp will replay every commit after Commit1 (so here Commit2 and Commit3 ) to the new ' correctbranch '.

    链接地址: http://www.djcxy.com/p/632.html

    上一篇: 从Ruby调用shell命令

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