当我遇到 merge 冲突并键入 git ls-files --modified
时,我希望它会显示在当前 merge 冲突中修改的文件列表,并且只显示一个文件一次.但有时它会多次显示同一个文件。例如,当我执行以下操作时:
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
显示
file
file
当 git status 只显示一次 file
时。
在本例中,它列出了同一个文件两次,但我曾遇到过它列出同一个文件 3 次的情况。
这是预期的行为吗?
最佳答案
git ls-files
是一个低级命令(在 Git 世界中,这称为“管道命令”),它显示 Git 存储库的内部状态。更准确地说,它列出了索引中的条目。
当 merge 以冲突结束时,每个冲突文件在索引中有 3 个条目:一个用于共同祖先,一个用于您的版本,一个用于被 merge 的版本。当您有 Unresolved 冲突时,这就是允许 git diff
向您显示组合差异的原因。
作为上述两个陈述的结果,git ls-files
为同一文件显示多个条目以防发生冲突是合乎逻辑的。
关于git - 为什么 `git ls-files --modified` 在 merge 冲突中多次显示文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50568422/