gpt4 book ai didi

mercurial - 在 mercurial 中,如何查看 merge 变更集和一个父级之间的差异,而另一个父级没有更改?

转载 作者:行者123 更新时间:2023-12-04 02:19:54 24 4
gpt4 key购买 nike

考虑这个简单的 repo :

mkdir temp
cd temp
hg init
echo abc > file1
hg ci -A -m init
echo def >> file1
echo hey > file2
hg ci -A -m A
hg up -r0
echo ghi >> file1
echo hey > file3
hg ci -A -m B
hg merge
hg ci -m merge

在合并期间,取“ghi”(哪一边并不重要)。

DAG 是:
0 - 2 - 3
\- 1 -/
hg diff -r1:3显示文件 1 更改和新文件 3。
hg diff -r2:3显示新文件2。与 hg log -p -r3 相同和 hg st --change 3 ,因为 2 是第一个父级。

我的问题是: 我怎样才能看到 1 和 3 之间的变化减去 2 的变化 ,这在概念上是 d(1:3) - d(0:2) ?

我希望只看到 file1 更改。 hg log -r3 -v只显示“文件:文件 1”(我猜是因为它是更改 ctx 中的唯一文件),但奇怪的是, hg log -r3 --debug还显示“文件+:文件2”。

如果我运行 hg view (由捆绑的 hgk 扩展提供)并单击 r3,它仅显示 file1。我看不懂 tcl/tk 代码,但似乎诀窍在于 contmergediff函数,它获取合并中的文件列表,其中以某种方式省略了 file2。

FWIW,TortoiseHg 与上述所有不同:单击 r3 在文件列表中显示“M file1”和“A file2”,但在 file1 中没有显示实际更改。单击“Other Parent”显示“M file1”和“A file3”,与“diff -r1:3”相同。

一个真实的用例是这样的:r1 是我的,r2 是同事的。之前同事审核了r1(diff 0:1),但是他在要求审核r2之前没有合并。所以我回顾了 r2 (diff 0:2),后来他做了合并。然后当我看到 diff 1:3 时,我不得不忘记我曾经回顾过 r2。如果合并差异很小,我可以只使用 hgk。但是如果它很大,我真的需要在vdiff中看到它。

(更新)现在有一个 mergediff extension .如果有人尝试并发现它有效,请添加答案。

最佳答案

这是一个猜测(尽管我不确定它是否真的符合您的要求)。命令

$ hg log --template {files} -r <merge-revision>
列出已被合并更改的文件。此输出可用作 diff 命令的文件列表,以仅显示您感兴趣的更改。
应用于您的示例,以下内容应显示合并对您在修订版 1 中所做的贡献:
$ hg diff -r 1:3 $(hg log --template '{files}' -r 3)
diff --git a/file1 b/file1
--- a/file1
+++ b/file1
@@ -1,2 +1,2 @@
abc
-def
+ghi
同样,下面的命令应该向您展示合并如何影响您的同事在修订版 2 中的更改:
$ hg diff -r 2:3 $(hg log --template '{files}' -r 3)
# no output, since your colleague decided to keep her *ghi*

关于mercurial - 在 mercurial 中,如何查看 merge 变更集和一个父级之间的差异,而另一个父级没有更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4329230/

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