189

How can you put uncommitted changes to a branch TEST when I am at the branch master?

Léo Léopold Hertz 준영
  • 134,464
  • 179
  • 445
  • 697

4 Answers4

195

Also you can create a new branch and switch to it by doing:

git checkout -b new_branch
git add .

I use this all the time because I always forget to start a new branch before I start editing code.

Swanand
  • 12,317
  • 7
  • 45
  • 62
  • 3
    same issue as @jouni noted for the other answer - you can run into difficulty merging the branch back into master if additional changes conflict with original changes. IMO this thread answers the question better: http://stackoverflow.com/questions/556923/git-how-to-merge-my-local-working-changes-into-another-branch – jpw Apr 20 '13 at 18:58
  • Short, sweet and reassuring ... "I use this all the time..." – ϹοδεMεδιϲ Jun 17 '13 at 16:45
  • 1
    Don't forget to do commit in the new_branch. If you switch back to the master branch and revert changed files, you will lose them in the new_branch too. – petrsyn Mar 25 '14 at 22:48
151

You can just checkout to the test branch and then commit. You don't lose your uncommited changes when moving to another branch.

Supposing you are at the master branch:

git checkout test
git add .
git add deletedFile1
git add deletedFile2
...
git commit -m "My Custom Message"

I am not really sure about the deleted files, but I guess they aren't included when you use git add .

Swanand
  • 12,317
  • 7
  • 45
  • 62
Samuel Carrijo
  • 17,449
  • 12
  • 49
  • 59
  • 12
    Sometimes the checkout will fail because your changes conflict with that branch. You can try checkout -m to merge. – Jouni K. Seppänen Nov 04 '10 at 14:00
  • 2
    I tried this but I got an error : error: Your local changes to the following files would be overwritten by checkout. Please, commit your changes or stash them before you can switch branches. – ishwr Dec 19 '13 at 11:16
  • While this will work, the answer which says use stash should be preferred, IMO. Maybe just personal choice, but it is a cleaner workflow, logically and introduces STASH which is a useful command. – Patrick Mar 28 '16 at 22:45
  • The option "-b" is missing, as the headline suggests that the question is concerning a "new" branch. – Guntram May 09 '17 at 11:20
36

Why not just use git stash. I think it's more intuitive like a copy-and-paste.

$ git branch
  develop
* master
  feature1
  TEST
$

You have some files in your current branch that you want to move.

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#      modified:   awesome.py
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   linez.py
#
$
$ git stash
Saved working directory and index state \
  "WIP on master: 934beef added the index file"
HEAD is now at 934beef added the index file
(To restore them type "git stash apply")
$
$ git status
# On branch master
nothing to commit (working directory clean)
$
$
$ git stash list
stash@{0}: WIP on master: 934beef ...great changes
$

Move to the other branch.

$ git checkout TEST

And apply

$ git stash apply
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#      modified:   awesome.py
#      modified:   linez.py
#

I also like git stash because I use git flow, which complains when you want to finish a feature branch whilst having changes still in your working directory.

Just like @Mike Bethany, this happens to me all the time because I work on a new problem while forgetting I am still on another branch. So you can stash your work, git flow feature finish..., and git stash apply to new git flow feature start ... branch.

HeyWatchThis
  • 21,241
  • 6
  • 33
  • 41
5
git checkout TEST
git add file1 file2
git commit
Bombe
  • 81,643
  • 20
  • 123
  • 127