假设当前提交为A,然后创建一个新的提交B,然后在工作树目录中进行一些更改。现在,我运行git stash push
。 git stash push
隐藏了什么?仅仅是创建B以来我在工作树目录中所做的更改,还是创建自A以来我对提交B所做的更改?
如果我随后签出提交A,并运行git stash pop
,这是否将创建提交B后对工作目录所做的更改或自A以来对提交B所做的更改应用于我? >
git stash push
是否将更改存储到最后一个提交状态(即,当前工作树目录和最后一个提交状态之间的差异),或者仅存储当前状态?
谢谢。
答案 0 :(得分:1)
根据the Git documentation,git stash push
与git stash
相同:
不带任何参数调用git stash等效于git stash push。默认情况下,隐藏项显示为“ WIP on branchname…”,但是在创建隐藏项时,您可以在命令行上提供更具描述性的消息。
因此,这将存储您从上次提交所做的所有新更改。
git stash pop
does the same和git stash apply
一样,只是它从存储列表中删除了此存储状态,因此这是git stash push
的反操作。
总而言之,这意味着stash
操作将默认情况下不考虑已提交给分支的所有内容,而仅考虑您自该提交以来所做的新更改。
答案 1 :(得分:1)
要回答不同的部分:
git stash推送存储什么?仅仅是创建B以来我在工作树目录中所做的更改,还是创建自A以来我对提交B所做的更改?
是的,仅隐藏自创建B以来所做的更改。
如果我随后签出提交A,然后运行git stash pop,这是否将创建提交B后对工作目录所做的更改或我自提交以来对提交B所做的更改应用到工作目录?
您将在文件位于A点的状态(提交是整个存储库的快照)之上应用自创建以来B所做的更改。
git stash push是否将更改保存到最后的提交状态(即,当前工作树目录和最后提交的状态之间的差异),还是仅保存当前状态?
(我的答案的以下部分是不准确的。请参见下面的torek的评论。)只有在提交git stash
时,提交B和回购状态之间的更改才会被保存,不是整个仓库的快照(如果您愿意的话,只是一个适当的提交。)
答案 2 :(得分:1)
将本地修改保存到新的存储条目,然后将其回滚到HEAD(在工作树和索引中)。该部分是可选的,并提供说明以及隐藏状态。
要快速制作快照,可以省略“ push”。
换句话说,git stash push
与git stash
相同。
在documentation中,git stash save
也已弃用git stash push
。
运行git stash
时,将存储所有尚未提交的更改,将分支恢复为最新的提交。如果更改分支并运行git stash pop
,Git会将更改应用到新分支。
但是,如果两个分支不同步,git stash pop
可能会失败。例如,文件 FOO 已被推送到分支A,并且git stash
对该文件进行了存储。分支B不包含 FOO ,因此git stash pop
将无法将您的存储应用于分支B。