`git stash push`隐藏什么?

时间:2019-01-22 22:51:47

标签: git

假设当前提交为A,然后创建一个新的提交B,然后在工作树目录中进行一些更改。现在,我运行git stash pushgit stash push隐藏了什么?仅仅是创建B以来我在工作树目录中所做的更改,还是创建自A以来我对提交B所做的更改?

如果我随后签出提交A,并运行git stash pop,这是否将创建提交B后对工作目录所做的更改或自A以来对提交B所做的更改应用于我? >

git stash push是否将更改存储到最后一个提交状态(即,当前工作树目录和最后一个提交状态之间的差异),或者仅存储当前状态?

谢谢。

3 个答案:

答案 0 :(得分:1)

根据the Git documentationgit stash pushgit stash相同:

  

不带任何参数调用git stash等效于git stash push。默认情况下,隐藏项显示为“ WIP on branchname…”,但是在创建隐藏项时,您可以在命令行上提供更具描述性的消息。

因此,这将存储您从上次提交所做的所有新更改。

git stash pop does the samegit 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)

根据documentation

  

将本地修改保存到新的存储条目,然后将其回滚到HEAD(在工作树和索引中)。该部分是可选的,并提供说明以及隐藏状态。

     

要快速制作快照,可以省略“ push”。

换句话说,git stash pushgit 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。