git stash
创建一个包含暂存更改的提交 (refs/stash^2
),一个包含未跟踪文件的无父提交 (refs/stash^3
),以及一个包含暂存和未暂存更改的提交,这是前两个和的合并头 (refs/stash
).
$ git log --graph --all --oneline
*-. bcfa2f3 (refs/stash) WIP on develop: 4500b25 init
|\ \
| | * 6090318 untracked files on develop: 4500b25 init
| * e41cc92 index on develop: 4500b25 init
|/
* 4500b25 (HEAD -> develop) init
为什么
refs/stash
不包含未跟踪的文件?考虑到引用名为 refs/stash
或 stash
,这正是您所期望的,大概 是您在使用 git stash apply
时应用的内容。这也是您所期望的,因为 refs/stash
是由合并提交创建的,其中 refs/stash^3
作为父级之一。
此外,缺少诸如
--force
或 git stash apply
合并策略选项之类的内容会鼓励直接使用 refs/stash
,例如使用 git restore -s stash .
,这不会让您获得未跟踪的文件。如果您知道的话,您可以使用 git stash branch
,但是将更改更改到您想要的分支需要一系列额外的步骤,这对于不太高级的 git 用户来说可能不太容易。
这是对直觉的严重违反,对于任何隐藏未跟踪文件的人来说,这可能迟早会导致问题。有什么道理吗?
不分离未跟踪的文件将失去未跟踪的文件和新添加的文件之间的区别。