git commit的diff _both_ parents

0kjbasz6  于 2023-09-29  发布在  Git
关注(0)|答案(2)|浏览(159)

有没有一种方法可以查看合并提交的diff,这样你就可以一次看到两个父提交之间的diff?
我并不是说先查看parent 1的差异,然后再查看parent 2的差异。我想要的输出有两个列在左边使用。对于不同于父行的每一行,列1具有+/-符号。父母二人也是如此。
它看起来像这样:

  1. Hello
  2. - World
  3. -- How are you
  4. + doing?

在这个输出中,任何以两个加号或减号开始的行都意味着合并提交本身引入了除了自动合并之外的更改。
你能在git中做到这一点吗?
编辑:
这里有一个相关的问题:How do you see / show a git merge conflict resolution that was done, given a merge commit SHA1?
我的用例与这个问题相同:我想查看解决合并冲突后所做的更改。

3zwtqj6y

3zwtqj6y1#

git show似乎做了我想做的事情。
在我做的git repo测试中:https://github.com/Thr4wn/test,下面是git show的输出:

  1. $ git show master
  2. commit 5bb48fc7481f973cee9a4441d3466fe513bcd685
  3. Merge: 190fded f678b58
  4. Author: Alexander Bird <[email protected]>
  5. Date: Wed Jun 3 15:30:03 2015 -0400
  6. merged
  7. diff --cc README
  8. index 94954ab,ce01362..363f0a5
  9. --- a/README
  10. +++ b/README
  11. @@@ -1,2 -1,1 +1,3 @@@
  12. hello
  13. ++there
  14. +world

这就是我记忆中曾经存在的东西
但是,git show(没有-m标志)仅显示与双亲不同的更改。对我来说,这就是我所追求的。如果没有合并冲突,那么git show可能没有diff。

展开查看全部
iqjalb3h

iqjalb3h2#

您正在查找组合的diff格式。它恰好是git showas you discovered的默认格式,但您可以通过任何命令的diff输出获得它。文档摘录如下:

组合diff格式

任何差异生成命令都可以使用-c--cc选项来在显示合并时生成组合差异。这是显示git-diff[1]git-show[1]合并时的默认格式。还请注意,您可以为这些命令中的任何一个给予适当的--diff-merges选项,以强制生成特定格式的差异。
“combined diff”格式如下所示:

  1. diff --combined describe.c
  2. index fabadb8,cc95eb0..4866510
  3. --- a/describe.c
  4. +++ b/describe.c
  5. @@@ -98,20 -98,12 +98,20 @@@
  6. return (a_date > b_date) ? -1 : (a_date == b_date) ? 0 : 1;
  7. }
  8. - static void describe(char *arg)
  9. -static void describe(struct commit *cmit, int last_one)
  10. ++static void describe(char *arg, int last_one)
  11. {
  12. + unsigned char sha1[20];
  13. + struct commit *cmit;
  14. struct commit_list *list;
  15. static int initialized = 0;
  16. struct commit_name *n;
  17. + if (get_sha1(arg, sha1) < 0)
  18. + usage(describe_usage);
  19. + cmit = lookup_commit_reference(sha1);
  20. + if (!cmit)
  21. + usage(describe_usage);
  22. +
  23. if (!initialized) {
  24. initialized = 1;
  25. for_each_ref(get_name);
展开查看全部

相关问题