Search code examples
gitbranch

How do I merge my local uncommitted changes into another Git branch?


How can I do the following in Git?

My current branch is branch1 and I have made some local changes. However, I now realize that I actually meant to be applying these changes to branch2. Is there a way to apply/merge these changes so that they become local changes on branch2 without committing them on branch1?


Solution

  • Since your files are not yet committed in branch1:

    git stash
    git checkout branch2
    git stash pop
    

    or

    git stash
    git checkout branch2
    git stash list       # to check the various stash made in different branch
    git stash apply x    # to select the right one
    

    Above is the longer more explicit version of rbento's answer:

    git stash
    git stash branch branch2
    

    It uses:

    git stash branch <branchname> [<stash>]

    • Creates and checks out a new branch named <branchname> starting from the commit at which the <stash> was originally created,
    • applies the changes recorded in <stash> to the new working tree and index.

    If that succeeds, and <stash> is a reference of the form stash@{<revision>}, it then drops the <stash>.

    This is useful if the branch on which you ran git stash push has changed enough that git stash apply fails due to conflicts.
    Since the stash entry is applied on top of the commit that was HEAD at the time git stash was run, it restores the originally stashed state with no conflicts.


    As commented by benjohn (see git stash man page):

    To also stash currently untracked (newly added) files, add the argument -u, so:

    git stash -u