如何在手动解决冲突后立即获得类似的 Git diff?

问题描述 投票:0回答:1

我使用Git很长时间了,有时需要手动解决冲突。

当合并因合并失败而停止时,我会手动解决冲突。此时我可以拨打

git diff
,它只会向我显示那些有冲突并由我自己手动解决的差异。

但是在合并提交之后,看起来我无法再次看到这样的差异。最相似的是三向差异,它显示两个分支所做的所有更改,无论它们是冲突并手动解决,还是自动合并。

有人找到了一些技巧来查看这样的差异 - 再次在合并提交之前进行吗?

下面是演示我的问题的测试用例。

要在 bash 或 sh 中从为测试创建的空目录执行的文件

test-git-merge.sh

#/bin/sh

git init
git config user.email "[email protected]"
git config user.name "Vsevolod Novikov"
echo a1>>a.txt
echo a2>>a.txt
echo a3>>a.txt
echo b1>>b.txt
echo b2>>b.txt
echo b3>>b.txt
git add a.txt b.txt
git commit -a -m "Initial"
git checkout -b branch-x
echo a1>a.txt
echo "branch-x" >>a.txt
echo a2>>a.txt
echo a3>>a.txt
echo "branch-x" >>b.txt
git commit -a -m "Branch X"
git checkout master
git checkout -b branch-y
echo "branch-y" >>d.txt
git add d.txt
echo a1>a.txt
echo a2>>a.txt
echo "branch-y" >>a.txt
echo a3>>a.txt
echo "branch-y" >>b.txt
git commit -a -m "Branch Y"
git checkout branch-x
git checkout -b branch-z
git merge branch-y
echo "------------- Diff after merge conflict --------------"
git diff
echo b1>b.txt
echo b2>>b.txt
echo b3>>b.txt
echo "branch-x" >>b.txt
echo "branch-y" >>b.txt
echo "------------- Diff after merge conflict resolve --------------"
git diff
git commit -a -m "Fixed merge"
echo "------------- DIff for merge commit --------------"
git diff HEAD HEAD^@

------------- 合并冲突解决后的差异 --------------

diff --cc b.txt
index dac91e4,22e151d..0000000
--- a/b.txt
+++ b/b.txt
@@@ -1,4 -1,4 +1,5 @@@
  b1
  b2
  b3
 +branch-x
+ branch-y

------------- 合并提交的 DIff --------------

diff --cc a.txt
index 45f2c54,dd210a3..4164b20
--- a/a.txt
+++ b/a.txt
@@@ -1,4 -1,4 +1,5 @@@
  a1
 +branch-x
  a2
+ branch-y
  a3
diff --cc b.txt
index dac91e4,22e151d..7aaeeec
--- a/b.txt
+++ b/b.txt
@@@ -1,4 -1,4 +1,5 @@@
  b1
  b2
  b3
 +branch-x
+ branch-y

如您所见,后一个 diff 对于 a.txt 文件有一个

extra
不必要的部分,该部分已自动解决。

git merge diff
1个回答
0
投票

Diff after merge conflict resolve
时刻,
a.txt
上演,而
b.txt
则不上演。因此,
git diff
仅输出
b.txt
的差异。

为了仅输出

b.txt
的差异,我们需要将
b.txt
附加到
git diff HEAD HEAD^@

git diff HEAD HEAD^@ -- b.txt

但是手动指定

b.txt
并不明智。我们可以找出合并过程中发生冲突的文件。

git show HEAD --pretty= --remerge-diff --name-only

并将它们放在一起。

git diff HEAD HEAD^@ -- $(git show HEAD --pretty= --remerge-diff --name-only)
© www.soinside.com 2019 - 2024. All rights reserved.