为什么git diff没有为未合并的路径显示任何内容

Kar*_*and 9 git merge

合并两个分支时,合并失败很多次,我将单独解决差异.

一些成功合并的文件,我可以看到它的差异

git diff --staged <merged-file>
Run Code Online (Sandbox Code Playgroud)

问题是对于未合并路径,当我尝试检查引入的差异时,我什么也看不见.

git diff <unmerged-file>
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用远程主分支进行区分时,会出现差异.

git diff origin/master <unmerged-file>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?> 合并操作是否更新了我的本地HEAD或其他什么?
此外,当我git add用来标记分辨率时,他们永远不会进入临时区域,这是为什么git diff没有显示任何东西?

Dav*_*ave 12

在合并期间,冲突的文件处于特殊状态.存在多个具有相同文件名和不同blob id的条目.这些通常是三个blob(用于三向合并)或两个blob(用于简单合并).

尝试合并..

$ git merge origin/otherbranch
Merge remote-tracking branch 'origin/otherbranch' into mybranch

Conflicts:
    somefile.txt
Run Code Online (Sandbox Code Playgroud)

查看需要合并的文件

$ git diff --name-status --diff-filter=U
U       somefile.txt
Run Code Online (Sandbox Code Playgroud)

要么

$ git update-index --refresh
somefile.txt: needs merge
Run Code Online (Sandbox Code Playgroud)

查看与要合并的文件相关的blob;

$ git ls-files -s somefile.txt
100644 9a0579524e0c7ba9fc9ae18badadaddcad2d598f **1** somefile.txt
100644 1bcff16b6de5ed304a06e643070e40787db1ead8 **2** somefile.txt
100644 6e52271b22f6a6d1150619433551e0fa9094b108 **3** somefile.txt
Run Code Online (Sandbox Code Playgroud)

根据git-merge手册页.1 =共同的祖先,2 = HEAD(我们的)和3 = MERGE_HEAD(他们的)

显示差异

$ git diff 9a0579524e0c7ba9fc9ae18badadaddcad2d598f 6e52271b22f6a6d1150619433551e0fa9094b108
< some differences >
Run Code Online (Sandbox Code Playgroud)

检索共同的祖先..

$ git cat-file blob 9a0579524e0c7ba9fc9ae18badadaddcad2d598f

来自HEAD的结帐版本

$ git checkout --ours somefile.txt
Run Code Online (Sandbox Code Playgroud)

来自MERGE_HEAD的结账版本

$ git checkout --theirs somefile.txt
Run Code Online (Sandbox Code Playgroud)

重置为'合并'已更改

$ git checkout -m somefile.txt
Run Code Online (Sandbox Code Playgroud)


Kar*_*and 9

我能够看到冲突文件更改的唯一方法是:

git diff --merge <unmerged-file>
Run Code Online (Sandbox Code Playgroud)

  • 对我不起作用。我收到此错误消息: fatal: --merge without MERGE_HEAD? (2认同)