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

标签 git

当我遇到 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/

相关文章:

git - Hudson SSH key 权限被拒绝

Git 推送导致 "fatal: sha1 file ' <stdout >' write error: Invalid argument"错误

git - 如何在挑选多个补丁时跳过一个补丁?

git - Phabricator:如何使 arc diff 忽略未跟踪的文件以及如何编辑审阅者

git - 在 Docker 构建期间使用 git 子模块

git - 如何获取所有远程分支, "git fetch --all"不起作用

git - 有没有办法强制 Gerrit 将分支中的所有提交推送到代码审查?

git show-branch 并尝试修复/弄清楚发生了什么

linux - 在不更新父级的情况下从终端更新我的 fork

android - 如何在 Windows 中使用 Python-for-Android 创建一个包?