当我遇到合并冲突并键入时,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 次相同的文件。
这是预期的行为吗?
git ls-files是一个显示 Git 存储库内部状态的低级命令(在 Git 世界中,这称为“管道命令”)。更准确地说,它列出了索引中的条目。
当合并最终发生冲突时,每个冲突的文件在索引中都有 3 个条目:一个是共同祖先,一个是你的版本,一个是被合并的版本。git diff当您有未解决的冲突时,这允许向您显示组合差异。
由于上述两个语句,git ls-files在发生冲突时为同一文件显示多个条目是合乎逻辑的。