据我所知,当我在没有任何参数和路径的情况下运行git reset
时,默认为--mixed
git手册描述为:{/ p>
重置索引但不重置工作树(即更改的文件是 保留但未标记为提交)并报告未提交的内容 更新。
我想知道它将它重置为什么?我假设它使用git read-tree
将一些树读入索引文件,但它在哪里找到那棵树?其他一些选项可以解释在HEAD
文件中找到树,该文件指向提交或分支,因此可以解析树哈希。
但是,我已使用git read-tree aa23
将树放入索引,目前我的HEAD
文件包含以下内容:
ref: refs/heads/master
但是还没有创建分支。 该树包含两个文件:
$ git ls-files -s
100644 a1deaae8f9ac984a5bfd0e8eecfbafaf4a90a3d0 0 f1.txt
100644 9b96e21cb748285ebec53daec4afb2bdcb9a360a 0 f2.txt
当我运行git reset
时,我没有收到任何错误,git status
报告没有更改,git ls-files -s
报告没有文件。那么索引被重置为什么?
答案 0 :(得分:3)
在未出生的分支上运行git reset
时,Git明确使用semi-secret empty tree作为the target of the reset:
unborn = !strcmp(rev, "HEAD") && get_sha1("HEAD", oid.hash);
if (unborn) {
/* reset on unborn branch: treat as reset to empty tree */
hashcpy(oid.hash, EMPTY_TREE_SHA1_BIN);
} else if (!pathspec.nr) {
如果顶级树为空,则重置任何路径 P 的索引条目的正确(至少在概念上)结果是从索引中删除 P 。