经常有这样的事情发生,当你正在进行项目中某一部分的工作,里面的东西处于一个比较杂乱的状态,而你想转到其他分支上进行一些工作。问题是,你不想提交进行了一半的工作,否则以后你无法回到这个工作点。解决这个问题的办法就是
git stash命令。“‘储藏”“可以获取你工作目录的中间状态——也就是你修改过的被追踪的文件和暂存的变更——并将它保存到一个未完结变更的堆栈中,随时可以重新应用。
git stash
现在你想切换分支,但是你还不想提交你正在进行中的工作;所以你储藏这些变更。为了往堆栈推送一个新的储藏,只要运行
git stash
huskyui@ubuntu:~/Desktop/git/lesson09$ echo "ddd">d.txt
huskyui@ubuntu:~/Desktop/git/lesson09$ git add .
huskyui@ubuntu:~/Desktop/git/lesson09$ git stash
Saved working directory and index state WIP on dev: 1785850 second commit
huskyui@ubuntu:~/Desktop/git/lesson09$ git status
On branch dev
nothing to commit, working tree clean
huskyui@ubuntu:~/Desktop/git/lesson09$ git checkout master
Switched to branch 'master'
huskyui@ubuntu:~/Desktop/git/lesson09$ git status
On branch master
nothing to commit, working tree clean
git stash list
这时,你可以方便地切换到其他分支工作;你的变更都保存在栈上。要查看现有的储藏,你可以使用
git stash list:
huskyui@ubuntu:~/Desktop/git/lesson09$ git stash list
stash@{0}: WIP on dev: 1785850 second commit
stash@{1}: WIP on master: 0b94950 inital commit
stash@{2}: WIP on master: 0b94950 inital commit
stash@{3}: WIP on dev: 0b94950 inital commit
git stash apply
对文件的变更被重新应用,但是被暂存的文件没有重新被暂存。想那样的话,你必须在运行
git stash apply命令时带上一个--index的选项来告诉命令重新应用被暂存的变更。如果你是这么做的,你应该已经回到你原来的位置
huskyui@ubuntu:~/Desktop/git/lesson09$ git stash apply 0
On branch master
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: d.txt
git stash drop
apply 选项只尝试应用储藏的工作——储藏的内容仍然在栈上。要移除它,你可以运行
git stash drop,加上你希望移除的储藏的名字:
huskyui@ubuntu:~/Desktop/git/lesson09$ git stash drop 0
Dropped refs/stash@{0} (b1b6018668f2acbe33f11218f3c2759de07f8e86)