git: How to create a branch of my current work, bu

2019-05-07 13:08发布

问题:

I'm on a branch (let's say master), and I have some changes in my working dir. I get stuff working, but needing a lot of cleanup - so I'd like to save my current working dir to a branch just in case I need to go back to it. I'll definitely be deleting the branch later.

In addition, I want to continue working on master EXACTLY where I was.

Right now I do:

# Save to topic branch
git checkout -b working-stuff
git commit -a -m "work in progress"

# go back to master and continue with the state is was in before
git checkout master
git checkout -- .
git reset

Later on, I'll delete the topic branch.

So, the above does exactly what I want, but its a bit verbose. Is there a simpler way to do this (besides just scripting it)?

回答1:

You can use

 git stash

From the manual

Use git stash when you want to record the current state of the working directory and the index, but want to go back to a clean working directory. The command saves your local modifications away and reverts the working directory to match the HEAD commit.

With git stash you stash your modifications, then you can apply them again with:

 git stash apply

Or you can list your stashed modifications with:

 git stash list


回答2:

For completeness sake: If you want a proper branch (which has some advantages over a stash), you don’t need to use plumbing commands, you can also do:

git add -A .
git commit -m "dirty"
git branch dirtybranch
git reset --hard HEAD^


回答3:

$ git add bar

$ git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD ..." to unstage)
#
#       new file:   bar
#

$ git branch newbar $(echo wip | git commit-tree \
  $(git write-tree) -p $(git rev-parse HEAD))

$ git lola --name-status
* e3f88c8 (newbar) wip
| A     bar
* a7b1a76 (HEAD, master) foo
  A     foo

Just because you can doesn’t mean you should.



标签: git save branch