Jim*_*Jim 5 git git-stash git-commit
在git stash创建2个提交时.一个由stash引用引用并具有2个父提交.一位家长是我们保管藏身处的索引.另一方父母有我们藏匿的实际内容.
为什么存储需要2次提交?在我看来,只有1就足够了.即只是stash引用具有实际内容的提交.
这不行吗?
tor*_*rek 10
git stash事实上,最多可以提交三次.您观察到的两个是默认的两个:一个用于索引状态 - 请记住,在Git中,索引(也称为暂存区域)包含下一次写入提交,并在每次git add新内容时更新- 并且一个用于在工作树的状态.这些可能HEAD在创建存储时彼此不同和/或与提交不同.
根本问题git stash不仅仅是保存当前的工作树,也不仅仅是为了保存当前的索引状态,也不仅仅是为了保存两者的某种组合.如果您打算保存当前索引状态,则可以简单地进行普通提交.如果你打算保存两者的组合,你可以简单地运行git commit -a.
相反,git stash默认为节省双方的指数状态和工作树的状态,分别.这允许您稍后再次检索两个单独的状态,如果这是您的意思.它允许您检索两种状态的混合版本,如果这是您的意思.并且,如果您使用-u或-a,因此git stash使其第三次提交包含未跟踪或未跟踪和忽略的文件,它允许您恢复所有这些不同的状态.
您不是在保存藏匿处时表达您的最终意图,而是在您恢复它时.1 这可能不是最好的设计,因为(一)有时是无法恢复您的预期状态,以及(b)如果你使用git stash pop没有--index当你已经打算使用--index,这会破坏分离状态,然后丢弃这两个承诺,使得恢复非常困难.但总的来说,推迟决定通常是一种很好的方法.
1如果您--keep-index在保存存储时使用,实际上您在保存时至少声明了一些意图.但这完全是另一回事.此外,还有一个长期存在的错误,git stash它使索引和工作树状态分开存在问题.详情请见此处.