相关疑难解决方法(0)

如何才能看到Git合并冲突的"三方差异"?

假设我在Git分支master和我git merge featurebranch.发生了冲突foo.html.

当我打开时foo.html,我看到,在冲突地区,有什么master和有什么featurebranch.但我无法确切地说,master这种冲突方面做出了哪些改变featurebranch ; 我只知道主人现在有什么.

我想看看每个应用的差异.

或者,为了获得相同的信息,我可以看到:

  • 版本master现在
  • 版本featurebranch现在
  • 该版本他们共同的祖先

我怎么能看到这个?

git

60
推荐指数
2
解决办法
2万
查看次数

如何在没有合并的情况下在Git中执行三向差异?

我想在具有公共合并基础的两个git分支之间执行三向差异,并使用kdiff3查看它.

我发现很多指导对SO(和一些非常相似的问题(1,2,3)),但我还没有找到一个直接的答案.值得注意的是,对这个答案的评论意味着我想要的是可能的,但它对我不起作用.希望用户可以在这里ch :) :)

对于背景,当我执行合并时,我使用"diff3"冲突样式:

git config --global merge.conflictstyle diff3

我已git mergetool配置为使用kdiff3.

解决合并冲突时,这会显示四个文件:

  1. 当前分支的文件($ LOCAL)
  2. 另一个分支的文件($ REMOTE)
  3. 该文件是两个分支的共同祖先($ BASE)
  4. 合并的输出文件($ MERGED)

但是,git difftool只会拉起两个分支提示.我也希望看到基本文件. 为了清楚起见,我希望能够合并之前执行此差异,包括没有合并冲突的文件.(git mergetool如果存在冲突,则仅显示三向差异).


部分解决方案#1:

使用单个文件,我可以导出三个版本并手动调用diff:

git show local_branch:filename > localfile
git show remote_branch:filename > remotefile
git show `git merge-base local_branch remote_branch`:filename > basefile

{kdiff3_path}/kdiff3.exe --L1 "Base" --L2 "Local" --L3 "Remote" -o "outputfile" basefile localfile remotefile &
Run Code Online (Sandbox Code Playgroud)

这有两个问题:

  1. 我希望它适用于整个项目,而不仅仅是一个特定的文件.
  2. 这太丑了!我可以编写脚本,但我希望使用标准的git进程有一个更清晰的方法. …

git version-control diff merge

23
推荐指数
1
解决办法
4578
查看次数

标签 统计

git ×2

diff ×1

merge ×1

version-control ×1