git - Git “pairing broken” 和 “unknown” 状态是什么意思,它们何时出现?

标签 git git-diff

git diff 中的某些选项,例如 --name-status,会导致在文件名旁边输出状态字母。它们是:

A, C, D, M, R, T, U, X, B

……他们的意思是

Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), type (i.e. regular file, symlink, submodule, …) changed (T), Unmerged (U), Unknown (X), or pairing Broken (B).

问题XB 状态应该如何解释,什么情况导致它们出现?您能否提供导致此类状态出现在 git-diff 输出中的一系列步骤,以及可能的修复方法?

最佳答案

B “破对”状态从不直接出现在 --name-status 中输出,它仅作为选项的参数有用 --diff-filter当还使用选项 -B 时(--break-rewrites)。将其用作过滤器可以选择至少有一定比例的内容被删除或更改的文件。

这个“中断”对于 --name-status 不是很有用因为“中断”的 Gist 主要是改变差异文本的生成方式:它从差异输出中消除上下文行(未更改的行),而不是生成围绕任何“随机”公共(public)子序列所需的添加和删除行diff算法碰巧找到了。

git init broken-pairs
cd broken-pairs
nums() { seq "$1" "$2" 2>/dev/null || jot $(($2 - $1 + 1)) "$1"; }
nums   0  99 > a
nums 100 199 > b
git add a b
git commit -ma=0-99,b=100-199
nums 200 299 > a
{ nums 100 149; nums 350 399; } > b
git diff --name-status --diff-filter=B             # selects nothing
git diff --name-status --diff-filter=B -B          #         M100    a
git diff --name-status --diff-filter=B -B/50       #         M100    a M050    b

X “未知”状态不应该真正出现。如果确实出现,则意味着路径名既未取消 merge 、添加、删除、修改,也未更改其类型(有效:未更改),意外地进入了内部差异机制的核心;错误 feeding unmodified <pathname> to diffcore也会产生。

它似乎是一些旧操作模式遗留下来的。

关于git - Git “pairing broken” 和 “unknown” 状态是什么意思,它们何时出现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058879/

相关文章:

git - ssh_exchange_identification

git - 从 git 中的分支中提取最新提交

git - 如何将整个 git repo 输出到单个文件?

git - 如何在不输入完整路径的情况下运行 'git diff some/long/file/name'?

git diff 按文件名过滤

git - 使用 git 比较来自两个提交的一个文件

用于开发和实时网站的 Git

git克隆 "does not appear to be a git repository"

android - EGit 忽略/Android

git - 如何获得具有完整上下文的 git diff?