繁体   English   中英

git stash push不会存储未进行的变更吗?

[英]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 -ugit stash save -a 它们构成一个包含三个提交而不是两个提交的存储区。 它还更改了git stash save执行的清除操作。 后来的git stash apply或三提交stash的git stash pop的工作方式与后来的git stash apply或两次提交的stash的git stash pop的工作也有些不同,尽管此答案不能解决后来的git stash applygit stash pop所有git stash pop

2所述的动词git stash push仅仅是相反pop在动词git stash pop ; 它与git push无关。 过去, git stash没有push子命令。 有人指出git stash存在一些怪异的语法问题这种不对称性(没有推送就流行了),因此git stash最终获得了具有更好语法和仅存储部分文件功能的push子命令。

请注意,在使用子集功能时, 此处提到的IW提交仍是完整快照。 只是W快照仅添加指定的子集文件,然后随后的git reset + git stash运行的签出也仅会重置指定的子集。 对于多个Git修订版,此新功能中存在一个非常讨厌的,破坏数据的错误: git stash push <subset>将保存该子集,然后重置太多文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM