Git rebase与没有合并的冲突?

And*_*Vit 7 git conflict rebase

当git rebase发现冲突时,这意味着什么,但文件中没有明显的问题?有问题的文件没有冲突标记,并git mergetool说"无需合并".

我有的选项是重置添加:

# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." as appropriate to mark resolution)
#
#   both modified:      filename.js
Run Code Online (Sandbox Code Playgroud)

我如何找出这是什么以及采取哪条路径?

git ls-files -s filename.js 给出3行:

100644 d2c915b1d632b8ef8fbcf056824fb7fac7824ab9 1   filename.js
100644 9010798f1d19ac712196b1fc9b0870fd332b1275 2   filename.js
100644 b3ab7ec50812c73a3ec97bf0985f3226ec13cbc8 3   filename.js
Run Code Online (Sandbox Code Playgroud)

根据精细手册,该命令告诉我们模式位,对象名称和阶段编号.模式位是相同的.那么1,2和3是什么,为什么它们"被修改",但没有显示冲突标记?

Mar*_*air 8

在指数的版本标记1,2以及3具有以下含义:

  1. 该文件位于您正在合并的两个提交的共同祖先中.
  2. 文件原样HEAD,即您进行合并时的当前提交.
  3. 您尝试合并到的提交中的文件HEAD.

我获取此信息的来源是git手册中有关解决冲突的有用部分.

both modified输出git status指示,当然,该文件已通过,因为他们的共同祖先,你合并这两个提交不同的方式改变.

对我来说,为什么你没有在文件中看到冲突标记是相当神秘的 - 然而 - blob在输出中有不同的对象名称(哈希)git ls-files -s表明它们确实具有不同的内容.如果你很高兴与文件,因为它是在你的工作副本,你可以做git add filename.js,然后git rebase --continue.但是,无论如何,您可能想知道这些差异是什么.为此,我会尝试以下方法:

git diff :2:filename.js filename.js
Run Code Online (Sandbox Code Playgroud)

...将显示版本HEAD和当前工作副本之间的差异.同样,您可以尝试:

git diff :3:filename.js filename.js
Run Code Online (Sandbox Code Playgroud)

...查看正在合并的版本与您的工作副本之间的区别.