为什么`git ls-files --modified`在合并冲突中多次显示文件?

eed*_*rah 1 git

当我遇到合并冲突并键入时,git ls-files --modified我希望它会显示在当前合并冲突中修改的文件列表,并且只显示一次文件。但有时它会显示多次列出的同一个文件。例如,当我执行以下操作时:

git init
git commit --allow-empty -m 'init'
echo hello world > file
git add -A
git commit -m "hello world"
git checkout HEAD^
git checkout -b other
echo hello other > file
git add -A
git commit -m "hello other"
git merge master 
# Generates conflict
git ls-files --modified
Run Code Online (Sandbox Code Playgroud)

表明

file
file
Run Code Online (Sandbox Code Playgroud)

当 git status 只显示file一次时。

在这种情况下,它列出了两次相同的文件,但我有几次它列出了 3 次相同的文件。

这是预期的行为吗?

Mat*_*Moy 5

git ls-files是一个显示 Git 存储库内部状态的低级命令(在 Git 世界中,这称为“管道命令”)。更准确地说,它列出了索引中的条目。

当合并最终发生冲突时,每个冲突的文件在索引中都有 3 个条目:一个是共同祖先,一个是你的版本,一个是被合并的版本。git diff当您有未解决的冲突时,这允许向您显示组合差异。

由于上述两个语句,git ls-files在发生冲突时为同一文件显示多个条目是合乎逻辑的。