git stash不属于任何分支?

时间:2015-09-20 14:20:21

标签: git github version-control

我正在学习和练习git。我所学到的关于藏匿的是,"我正在分支机构工作,如果我必须结账到另一个分支但不想承诺我正在进行的不完整的工作,那么我应该把它藏起来并结账到其他分支。回到藏匿的分支后,我必须将[stash]应用于'然后我可以再次完成我以前不完整的工作"。那是完全正确的吗? 现在当我测试这个时,我做了一些奇怪的事情。我创建了一个文件并写了一些东西,然后添加它来让分支' A'然后我藏起来并结帐到主分支和命令' git stash apply'然后我添加到我的分支' A'并且藏起来,我现在在分支中可见。

现在我的问题是,

  • 为什么在主分支处可以看到新文件?(因为我添加并将其存储到分支' A')
  • 不是git add(for和unmarked file)意味着开始为特定分支标记新文件?
  • 不存储意味着保存标记不完整的工作'对于某个特定的分支?

很抱歉写一些可能很傻的东西。但我真的很想明白。 感谢。

2 个答案:

答案 0 :(得分:1)

Stashes会保留有关其父级的信息(为了显示他们的更改),但它们不属于特定分支。这就是为什么可以在分支A上存储某些内容,并将该存储应用于分支B上。

您可以将stashes视为可以应用的单个补丁堆栈。无论何时存储某些东西,都会在该堆栈的顶部添加存储,并且每当您应用存储时,顶部存储将应用于当前分支。由于只有一堆stashes,你可以将它们应用于任何分支。

答案 1 :(得分:1)

  

为什么新文件在主分支上可见?(因为我添加并隐藏它)   分支'A')

执行git stash时,实际上会将存储库的当前状态写入存储区。因此,尚未提交的文件已保存在存储区中。 现在,您git stash apply将该状态应用于当前的分支机构分支机构。因此该文件显示在主分支中。

  

不是git add(for和unmarked file)意味着开始标记新文件   对于某个特定的分支?

是的。

<强> FYI

即使在添加操作后仍然执行存储操作,您仍然会将该文件保存在存储区域中,而不管分支是什么。

  

不是存储意味着为某个特定节省“未完成的标记工作”   分支?

不,执行git stash不会将其标记为为特定分支保存,它只会转储存储库的当前状态,而不管分支。

Read here for more information