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

时间:2014-03-06 05:19:21

标签: git merge

虽然合并了两个分支,但很多次合并失败了,我要单独解决差异问题。

一些合并成功的文件,我可以使用

看到它们的差异
git diff --staged <merged-file>

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

git diff <unmerged-file>

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

git diff origin/master <unmerged-file>

为什么会发生这种情况&gt;?合并操作是否更新了我当地的HEAD或什么? 此外,当我使用git add来标记分辨率时,它们永远不会进入临时区域,这是git diff没有显示任何内容的原因吗?

3 个答案:

答案 0 :(得分:11)

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

尝试合并..

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

Conflicts:
    somefile.txt

查看需要合并的文件

$ git diff --name-status --diff-filter=U
U       somefile.txt

$ git update-index --refresh
somefile.txt: needs merge

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

$ git ls-files -s somefile.txt
100644 9a0579524e0c7ba9fc9ae18badadaddcad2d598f **1** somefile.txt
100644 1bcff16b6de5ed304a06e643070e40787db1ead8 **2** somefile.txt
100644 6e52271b22f6a6d1150619433551e0fa9094b108 **3** somefile.txt

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

显示差异

$ git diff 9a0579524e0c7ba9fc9ae18badadaddcad2d598f 6e52271b22f6a6d1150619433551e0fa9094b108
< some differences >

检索共同的祖先..

$ git cat-file blob 9a0579524e0c7ba9fc9ae18badadaddcad2d598f

HEAD的结帐版

$ git checkout --ours somefile.txt

MERGE_HEAD的结帐版本

$ git checkout --theirs somefile.txt

重置为'合并'已更改

$ git checkout -m somefile.txt

答案 1 :(得分:9)

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

git diff --merge <unmerged-file>

答案 2 :(得分:0)

您尚未将合并的更改推送到远程分支。合并仅影响本地分支。因此本地和远程分支之间存在差异。