[英]Does `git stash push` not stash unstaged changes?
git stash push
不会存储未分段的更改吗?
$ touch testfile
$ git stash push
No local changes to save
为什么现在对分阶段的更改有效?
$ git add testfile
$ git stash push
Saved working directory and index state WIP on mybranch: e5c1660 add note
谢谢。
git stash
代码默认情况下精确地保存1,并且仅保存跟踪的文件。 未跟踪的文件是在工作树中但不在索引中的文件。 这样的文件将不在您进行的下一个提交中,如果您现在进行提交,则无论该文件是否列在.gitignore
。
一旦该文件是在索引中,这将是在未来提交你做,无论它是否是上市.gitignore
。 因此,一旦git add testfile
,索引中的某些内容便与HEAD
中的内容不匹配,并且git stash
愿意从索引和工作树中进行提交。 如果git stash
命令(没有其他选项)与HEAD
不同,它将保存2个索引和工作树,但是如果两者完全匹配HEAD
,则不会执行任何操作。
1在这里我故意忽略了运行git stash save -u
或git stash save -a
。 它们构成一个包含三个提交而不是两个提交的存储区。 它还更改了git stash save
执行的清除操作。 后来的git stash apply
或三提交stash的git stash pop
的工作方式与后来的git stash apply
或两次提交的stash的git stash pop
的工作也有些不同,尽管此答案不能解决后来的git stash apply
或git stash pop
所有git stash pop
。
2所述的推动词git stash push
仅仅是相反pop
在动词git stash pop
; 它与git push
无关。 过去, git stash
没有push
子命令。 有人指出git stash
存在一些怪异的语法问题,这种不对称性(没有推送就流行了),因此git stash
最终获得了具有更好语法和仅存储部分文件功能的push
子命令。
请注意,在使用子集功能时, 此处提到的I
和W
提交仍是完整快照。 只是W
快照仅添加指定的子集文件,然后随后的git reset
+ git stash
运行的签出也仅会重置指定的子集。 对于多个Git修订版,此新功能中存在一个非常讨厌的,破坏数据的错误: git stash push <subset>
将保存该子集,然后重置太多文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.