I eagerly ducked into code mode and modified some files, but neglected to branch from master first. The mods aren't so extensive that I can't redo them, but what's a good way of taking my (so far, uncommitted) changes in master and migrating them to a new branch, leaving master untouched in the end?
-
1[**Dude.**](https://www.google.com/search?q=Forgot+to+branch+in+git%2C+need+to+move+changes+from+master). This question appears to be off-topic because googling the title produces excellent answers. – jthill Oct 26 '13 at 22:54
-
13@jthill I found this question through a google search. Am I stuck in an infinite loop? – phoog Feb 06 '19 at 15:06
3 Answers
If not yet committed anywhere (git status shows a bunch of stuff modified, it's OK if it's "git add"-ed too):
$ git checkout -b newbranch
Despite the name checkout this usage (with -b) does not check anything out. The -b flag says "create a new branch", so git creates the branch-name and makes it correspond to the current HEAD commit. Then it makes HEAD point to the new branch, and stops there.
Your next commit is therefore on newbranch, which has as its parent commit, the commit you were on when you started modifying files. So assuming you were on master, and you had these commits:
A - B - C <-- HEAD=master
the checkout -b makes this read:
A - B - C <-- master, HEAD=newbranch
and a later commit adds a new commit D:
A - B - C <-- master
\
D <-- newbranch
- 448,244
- 59
- 642
- 775
git branch -M master my-branch
With a
-mor-Moption,<oldbranch>will be renamed to<newbranch>. If<oldbranch>had a corresponding reflog, it is renamed to match<newbranch>, and a reflog entry is created to remember the branch renaming. If<newbranch>exists,-Mmust be used to force the rename to happen.
and then
git fetch origin refs/heads/master:refs/heads/master
or
git branch master my-branch (or another ref)
- 55,411
- 20
- 125
- 222
- 6,704
- 14
- 22
-
That's a good way to change stuff that was *committed* to be on the new branch `my-branch`. – torek Oct 26 '13 at 22:24
git stash
git stash branch <branchname>
- 46,136
- 12
- 94
- 102
-
That will work, but `git checkout -b
` is simpler (and a bit faster, it does not have to undo changes and then re-apply them). – torek Oct 26 '13 at 22:19