我正在一个存储库中运行命令
git diff-index main
,该存储库的工作树等于分支main
,但更改缓存在索引中。该命令告诉我存在差异(我理解这是工作树和分支main
之间)。但没有什么区别。
首先设置存储库
$ git init -b main /tmp/repo
Initialized empty Git repository in /tmp/repo/.git/
$ cd /tmp/repo
$ (main #) ls -AF
.git/
$ (main #) echo hello > world
$ (main #%) git add .
$ (main +) git commit -m hello
[main (root-commit) 14a90af] hello
1 file changed, 1 insertion(+)
create mode 100644 world
$ (main) echo bye > world
$ (main *) git add .
$ (main *+) echo hello > world
验证文件
world
在main
和工作树中是否相同
$ (main *+) git hash-object world
ce013625030ba8dba906f756967f9e9ca394464a
$ (main *+) git ls-tree -r main | grep world
100644 blob ce013625030ba8dba906f756967f9e9ca394464a world
但是运行时
git diff-index main
,它告诉我有差异
$ (main *+) git diff-index main
:100644 100644 ce013625030ba8dba906f756967f9e9ca394464a 0000000000000000000000000000000000000000 M world
此外,当运行
git diff-index -p main
时,要看到差异,它没有向我显示任何内容。
$ (main *+) git diff-index -p main
也许我误解了一些事情
git diff-index
。我不知道这是否是预期的行为。有人可以向我解释一下这种行为吗?
echo bye > world
git add .
您已将文件的修改内容添加到索引中。
world
。
echo hello > world
现在你又改变了文件;文件和索引之间存在差异。 git diff-index
显示差异。如果您这样做
git add .
,那么差异就会消失。