gpt4 book ai didi

git - 为什么 git diff 不显示未 merge 路径的任何内容

转载 作者:太空狗 更新时间:2023-10-29 12:44:28 26 4
gpt4 key购买 nike

merge 两个分支时,很多时候 merge 失败,我必须单独解决差异。

一些文件 merge 成功,我可以看到差异:

git diff --staged <merged-file>

问题是对于未 merge 的路径,当我尝试检查引入的差异时,我什么也看不到:

git diff <unmerged-file>

但是当我尝试将它与远程 master 分支进行比较时,就会出现差异:

git diff origin/master <unmerged-file>

为什么会这样? merge 操作是在更新我的本地 HEAD 还是什么?
此外,当我使用 git add 标记解决方案时,它们永远不会进入暂存区 - 这就是 git diff 没有显示任何内容的原因吗?

最佳答案

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

尝试 merge ..

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

Conflicts:
somefile.txt

查看需要 merge 的文件

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

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

查看与正在 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 猫文件 blob 9a0579524e0c7ba9fc9ae18badadaddcad2d598f

从 HEAD check out 版本

$ git checkout --ours somefile.txt

从 MERGE_HEAD checkout 版本

$ git checkout --theirs somefile.txt

重置为“merge ”已更改

$ git checkout -m somefile.txt

更新:

这通过使用 <ref>:ID:Filepath 有所简化。例如

git diff :1:somefile.txt :2:somefile.txt

将在 merge 中给出两个父项之间的差异。0代表完成 merge 1 表示冲突 merge 2/3 代表 merge 的两个父级。

如果您在特定提交时完成了 merge xxxxxx , 你可以使用 xxxxxx^0 来引用它的父级( merge 文件)xxxxxx^1 “左” parent ,和xxxxxx^2 “正确”的 parent 。可以按如下方式将 merge 后的文件与其祖先文件进行比较;

git diff xxxxxx^0:somefile xxxxxx^1:somefile

关于git - 为什么 git diff 不显示未 merge 路径的任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22215651/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com