除了简单使用git stash贮藏修改之外可以添加参数: save "save message"加一些注释;
首先我们使用git stash pop弹出上一个贮藏, 然后使用stash save命令贮藏:
1 2 3 4 5 6 7 8 9 10 11 12
zk@zk:~/workspace/git_test$ git stash pop 位于分支 dev 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: b.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a") 丢弃了 refs/stash@{0} (20d300aca604986a48e0dd2e15a6fbd0fa8b3919) zk@zk:~/workspace/git_test$ git stash save "first save" 保存工作目录和索引状态 On dev: first save
git stash list
list可以查看当前stash中的内容
1 2
zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: first save
git stash pop
将当前stash中的内容弹出,并应用到当前分支对应的工作目录上。
注:该命令将堆栈中最近保存的内容删除(栈是先进后出)
之前已经创建了一个stash: first save;
我们再次修改b.txt, 并添加another modification at dev branch., 然后再次贮藏:
1 2 3 4 5 6 7 8 9 10 11
zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: first save zk@zk:~/workspace/git_test$ vi b.txt zk@zk:~/workspace/git_test$ cat b.txt b file. another modification at dev branch. zk@zk:~/workspace/git_test$ git stash save "another save" 保存工作目录和索引状态 On dev: another save zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: another save stash@{1}: On dev: first save
此时使用pop弹出stash时, 总是栈顶的stash被弹出(即stash@{0}: On dev: another save):
1 2 3 4 5 6 7 8 9 10 11 12 13
zk@zk:~/workspace/git_test$ git stash pop 位于分支 dev 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: b.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a") 丢弃了 refs/stash@{0} (1863562fbc3ec23472d77a50ed92a3630f948823) zk@zk:~/workspace/git_test$ cat b.txt b file. another modification at dev branch.
zk@zk:~/workspace/git_test$ vi b.txt zk@zk:~/workspace/git_test$ cat b.txt b file. first stash. zk@zk:~/workspace/git_test$ git stash save 'first stash' 保存工作目录和索引状态 On dev: first stash zk@zk:~/workspace/git_test$ vi b.txt zk@zk:~/workspace/git_test$ cat b.txt b file. second stash. zk@zk:~/workspace/git_test$ git stash save 'second stash' 保存工作目录和索引状态 On dev: second stash zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: second stash stash@{1}: On dev: first stash
然后使用apply:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
zk@zk:~/workspace/git_test$ cat b.txt b file. modified at dev branch. zk@zk:~/workspace/git_test$ git stash apply 位于分支 dev 尚未暂存以备提交的变更: (使用 "git add <文件>..." 更新要提交的内容) (使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改: b.txt
修改尚未加入提交(使用 "git add" 和/或 "git commit -a") zk@zk:~/workspace/git_test$ cat b.txt b file. second stash.
# 暂存上次的apply zk@zk:~/workspace/git_test$ git stash save 'third stash' 保存工作目录和索引状态 On dev: third stash zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: third stash stash@{1}: On dev: second stash stash@{2}: On dev: first stash # 暂存后结果 zk@zk:~/workspace/git_test$ cat b.txt b file. modified at dev branch.
修改尚未加入提交(使用 "git add" 和/或 "git commit -a") zk@zk:~/workspace/git_test$ cat b.txt b file. first stash.
git stash drop + 名称
从堆栈中移除某个指定的stash
例如删除最早的stash:
1 2 3 4 5 6 7 8 9
zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: third stash stash@{1}: On dev: second stash stash@{2}: On dev: first stash zk@zk:~/workspace/git_test$ git stash drop stash@{2} 丢弃了 stash@{2} (d0c0ccda95446b047624dd125abd9097d14f322f) zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: third stash stash@{1}: On dev: second stash
git stash clear
清除堆栈中的所有内容
1 2 3
zk@zk:~/workspace/git_test$ git stash clear zk@zk:~/workspace/git_test$ git stash list # 空
git stash show
查看堆栈中最新保存的stash和当前目录的差异。
1 2 3 4 5 6
zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: second stash stash@{1}: On dev: first stash zk@zk:~/workspace/git_test$ git stash show b.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
通过 git stash show -p 查看详细的不同:
1 2 3 4 5 6 7 8 9
zk@zk:~/workspace/git_test$ git stash show -p diff --git a/b.txt b/b.txt index 2fbb2e3..11c5108 100644 --- a/b.txt +++ b/b.txt @@ -1,2 +1,2 @@ b file. -modified at dev branch. +second stash.
通过git stash show stash@{1}查看指定的stash和当前目录差异:
1 2 3 4 5 6 7 8 9
zk@zk:~/workspace/git_test$ git stash show stash@{1} -p diff --git a/b.txt b/b.txt index 2fbb2e3..ddfab50 100644 --- a/b.txt +++ b/b.txt @@ -1,2 +1,2 @@ b file. -modified at dev branch. +first stash.
zk@zk:~/workspace/git_test$ git stash list stash@{0}: On dev: second stash stash@{1}: On dev: first stash zk@zk:~/workspace/git_test$ vi b.txt zk@zk:~/workspace/git_test$ cat b.txt b file. modified after first & second stash. zk@zk:~/workspace/git_test$ git add b.txt zk@zk:~/workspace/git_test$ git commit -m 'add: modified after first & second stash.' [dev 7369f44] add: modified after first & second stash. 1 file changed, 1 insertion(+), 1 deletion(-)