How to fix committing to the wrong Git branch?

I just made a perfectly good commit to the wrong branch.
How do I undo the last commit in my master branch and then take those same changes and get them into my upgrade branch?

  • How to ignore files which are in repository?
  • can I make a git alias from this?
  • Are multiple `.gitignore`s frowned on?
  • How do I split file removals into a separate changeset in git
  • Is there an equivalent to git stash in perforce?
  • How do I prevent Eclipse search from looking in the .git directory?
  • GitHub: How to create pull request from forked repository to upstream repo only including some past commits
  • simplest way to download tip/head revision from a sourceforge git repository?
  • How to download files from git repository?
  • Git search all diffs
  • How can I move files & folders using git in Xcode 4?
  • git create new branch with same name, will it be pushed to the same remote?
  • 8 Solutions collect form web for “How to fix committing to the wrong Git branch?”

    If you haven’t yet pushed your changes, you can also do a soft reset:

    git reset --soft HEAD^

    This will revert the commit, but put the committed changes back into your index. Assuming the branches are relatively up-to-date with regard to each other, git will let you do a checkout into the other branch, whereupon you can simply commit:

    git checkout branch
    git commit

    The disadvantage is that you need to re-enter your commit message.

    If you have a clean (un-modified) working copy

    To rollback one commit (make sure you note the commit’s hash for the next step):

    git reset --hard HEAD^

    To pull that commit into a different branch:

    git checkout other-branch
    git cherry-pick COMMIT-HASH

    If you have modified or untracked changes

    Also note that git reset --hard will kill any untracked and modified changes you might have, so if you have those you might prefer:

    git reset HEAD^
    git checkout .

    4 years late on the topic, but this might be helpful to someone.

    If you forgot to create a new branch before committing and committed all on master, no matter how many commits you did, the following approach is easier:

    git stash                       # skip if all changes are committed
    git branch my_feature
    git reset --hard origin/master
    git checkout my_feature
    git stash pop                   # skip if all changes were committed

    Now you have your master branch equals to origin/master and all new commits are on my_feature. Note that my_feature is a local branch, not a remote one.

    If you already pushed your changes, you will need to force your next push after resetting the HEAD.

    git reset --hard HEAD^
    git merge COMMIT_SHA1
    git push --force

    Warning: a hard reset will undo any uncommitted modifications in your working copy, while a force push will completely overwrite the state of the remote branch with the current state of the local branch.

    Just in case, on Windows (using the Windows command line, not Bash) it’s actually four ^^^^ instead of one, so it’s

    git reset --hard HEAD^^^^

    So if your scenario is that you’ve committed to master but meant to commit to another-branch (which may or not may not already exist) but you haven’t pushed yet, this is pretty easy to fix.

    // if your branch doesn't exist, then add the -b argument 
    git checkout -b another-branch
    git branch --force master origin/master

    Now all your commits to master will be on another-branch.

    Sourced with love from:

    I recently did the same thing, where I accidentally committed a change to master, when I should have committed to other-branch. But I didn’t push anything.

    If you just committed to the wrong branch, and have not changed anything since, and have not pushed to the repo, then you can do the following:

    // rewind master to point to the commit just before your most recent commit.
    // this takes all changes in your most recent commit, and turns them into unstaged changes. 
    git reset HEAD~1 
    // temporarily save your unstaged changes as a commit that's not attached to any branch using git stash
    // all temporary commits created with git stash are put into a stack of temporary commits.
    git stash
    // create other-branch (if the other branch doesn't already exist)
    git branch other-branch
    // checkout the other branch you should have committed to.
    git checkout other-branch
    // take the temporary commit you created, and apply all of those changes to the new branch. 
    //This also deletes the temporary commit from the stack of temp commits.
    git stash pop
    // add the changes you want with git add...
    // re-commit your changes onto other-branch
    git commit -m "some message..."

    NOTE: in the above example, I was rewinding 1 commit with git reset HEAD~1. But if you wanted to rewind n commits, then you can do git reset HEAD~n.

    Also, if you ended up committing to the wrong branch, and also ended up write some more code before realizing that you committed to the wrong branch, then you could use git stash to save your in-progress work:

    // save the not-ready-to-commit work you're in the middle of
    git stash 
    // rewind n commits
    git reset HEAD~n 
    // stash the committed changes as a single temp commit onto the stack. 
    git stash 
    // create other-branch (if it doesn't already exist)
    git branch other-branch
    // checkout the other branch you should have committed to.
    git checkout other-branch
    // apply all the committed changes to the new branch
    git stash pop
    // add the changes you want with git add...
    // re-commit your changes onto the new branch as a single commit.
    git commit -m "some message..."
    // pop the changes you were in the middle of and continue coding
    git stash pop

    NOTE: I used this website as a reference

    If the branch you wanted to apply your changes to already exists (branch develop, for example), follow the instructions that were provided by fotanus below, then:

    git checkout develop
    git rebase develop my_feature # applies changes to correct branch
    git checkout develop # 'cuz rebasing will leave you on my_feature
    git merge develop my_feature # will be a fast-forward
    git branch -d my_feature

    And obviously you could use tempbranch or any other branch name instead of my_feature if you wanted.

    Also, if applicable, delay the stash pop (apply) until after you’ve merged at your target branch.

    If you run into this issue and you have Visual Studio, you can do the following:

    Right-click on your branch and select View History:

    enter image description here

    Right-click on commit you want to go back to. And Revert or Reset as needed.

    enter image description here

    Git Baby is a git and github fan, let's start git clone.