合并过程中,产生冲突的文件处于特殊状态。同一文件名对应多个不同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
重置为“merged”已更改
$ git checkout -m somefile.txt
更新:
使用<ref>:ID:Filepath
可以使这个过程更简单。
git diff :1:somefile.txt :2:somefile.txt
将为您提供合并中两个父级之间的差异。
0表示完成的合并
1表示冲突的合并
2/3表示合并的两个父级。
如果您在特定提交xxxxxx
处有一个已完成的合并,则可以使用xxxxxx^0
(合并文件)xxxxxx^1
“左侧”父级和xxxxxx^2
“右侧”父级来引用其父级。比较合并文件与其祖先可以按以下方式进行;
git diff xxxxxx^0:somefile xxxxxx^1:somefile
master
分支吗?还是你已经将master
合并到你的分支中了?当我自己尝试类似的情况时,通过对一个有冲突的文件进行“diff”的操作,输出了带有“>>> === <<<”标记的预期结果。 - Maic López Sáenzgit diff
中看到的内容。如果你要合并的文件更改足够简单,你也可以将它们作为描述的一部分添加,或者创建一个简化的示例来展示如何重现该问题。 - Maic López Sáenz