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?
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 formstash@{<revision>}
, it then drops the<stash>
.This is useful if the branch on which you ran
git stash push
has changed enough thatgit stash apply
fails due to conflicts.
Since the stash entry is applied on top of the commit that was HEAD at the timegit 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