使用场景:
1. 当正在dev分支上开发某个项目,这时项目中出现一个bug需要紧急修复,但是正在开发的内容只是完成一半还不想提交,这时可以用git stash命令将修改的代码内容保存至堆栈区。然后顺利切换到hotfix分支进行bug修复,修复完成后再次切回到dev分支从堆栈中恢复刚刚保存的内容。 
2. 由于疏忽,本应该在dev分支开发的内容却在master上进行了开发,需要重新切回到dev分支上进行开发,可以用git stash将内容保存至堆栈中。切回到dev分支后,再次恢复内容即可。 
总的来说,git stash命令的作用就是将目前还不想提交的但是已经修改的内容进行保存至堆栈中,后续可以在某个分支上恢复出堆栈中的内容。

1. git stash
将所有未提交的修改保存至堆栈中,用于后续恢复当前工作目录。如果想添加注释的话,可以用git stash save "hotfix..." 。
 

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
 
        modified:   src/main/java/com/wy/CacheTest.java
        modified:   src/main/java/com/wy/StringTest.java
 
no changes added to commit (use "git add" and/or "git commit -a")
 
$ git stash
Saved working directory and index state WIP on master: b2f489c second
 
$ git status
On branch master
nothing to commit, working tree clean

2. git stash list

查看当前stash暂存区中的内容

stash@{0}: On master: test2

 

4. git stash apply

将堆栈中的内容应用到当前目录,不同于git stash pop,该命令不会将内容从堆栈中删除,也就说该命令能够将堆栈的内容多次应用到工作目录中,适应于多分支的情况。可以使用git stash apply + stash名字(如stash@{test1})指定哪个stash恢复到当前的工作目录。

$ git stash apply
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
 
        modified:   src/main/java/com/wy/StringTest.java
 
no changes added to commit (use "git add" and/or "git commit -a")
 
$ git stash list
stash@{0}: On master: test2
stash@{1}: On master: test1

 

5. git stash drop + stash名字

从stash堆栈中移除某个指定的stash

6. git stash clear

清除stash堆栈中的所有内容

7. git stash show

查看堆栈中最新保存的stash和当前目录的差异。

$ git stash show
 src/main/java/com/wy/StringTest.java | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

8. git stash show stash@{1} -p 

查看指定stash与本地目录差异详情