当前位置:   article > 正文

git stash_no local changes to save

no local changes to save

这个命令用来将当前暂存区内容进行保存,然后整个工作区、暂存区、仓库恢复到上次提交的状态。
首先看一下当前git状态:
在这里插入图片描述
当前状态下只有一个README文件;
我们向工作空间加入一些文件或者文件夹,最后的状态如下:
在这里插入图片描述
整个工程目前由main.py空文件、README空文件、first/main.py空文件这几个部分组成。

然后再添加一些内容使得当前git状态如下:
在这里插入图片描述

即将main.py加入追踪后后再写入一行内容但不加入暂存区,新建两个文件test.py和__init__.py,其中test.py中增加一行内容,但均不放入暂存区;
然后执行git stash将内容保存:
在这里插入图片描述
这里有几个地方要注意:
1 执行保存时工作区或者暂存区至少有一处地方与头指针不同,否则提示“No local changes to save”导致失败;
2 可以直接使用git stash,不一定需要有save,但最好用save 然后后边加注释信息,方便stash过多时能区分;
3 默认情况下stash只会暂存已经添加到git的成员文件,为了将所有更改都添加(包括已经被gitignore的文件),需要在最后使用-u,表示所有文件都添加;这里使用了这个参数;

从上面的输出可以看到,当前分支已经很干净,所有内容均已被暂存,而stash记录使用了类似reset一样的reflog格式,所以切换是很方便的。
看一下stash中存储的这个对象的log:
在这里插入图片描述
这个log有点儿奇怪,一般情况下合并分支最多就是两个parent,但这个居然有三个,这三个parent能从下边的commit id上对应;首先045这个parent是stash之前head的commit id,第二个parent 0889b这个是暂存区的commit id,而第三个09ff则是工作区未追踪文件的commit id;而最新的commit则是stash时工作区的状态;
其实可以验证一下;
09ff5c这个commit指向的tree为a5341d,查看这个tree又能得到:
在这里插入图片描述
可以看到test.py中正是写入的’print(‘test’)’,而且这个tree只指向当时仅存在于工作区中的__init__.py和test.py两个文件;
而查看bdbc63这个对象可以看到:
在这里插入图片描述
main.py中的内容正是stash前写入的内容。

(因为测试,上面内容是在某个commit下操作的,然后会切换会master,但整体结论不受影响)。
最后将stash中的内容恢复,继续写代码:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/931060
推荐阅读
相关标签
  

闽ICP备14008679号