如何使用git log命令,使用parent #1生成补丁(patch)?

3
我可以看到我的 Git 历史记录左侧的车道是这样的:
git log origin/master --pretty=oneline --first-parent --decorate=no

我的项目设置的方式是,大部分时间这些都是唯一重要的更改。
然而,在使用-G搜索补丁时,我希望搜索提交与其父提交#1之间的差异,以便搜索涵盖了项目中发生的每个更改。
git log origin/master --pretty=oneline --first-parent --decorate=no -G keyword

原因是树长得像这样。

enter image description here

我想考虑整个梯形作为某些目的的单个操作。在上面生成的列表中,它显示为单个命令,但我无法以该格式搜索历史记录,以便立即确定发生在哪个git组中。
如果任何选项可以实现这一点,并且可以适用于gitk,那将非常好,这样当我进行操作时就可以看到整个梯形的单个操作。
gitk origin/master --first-parent

将其显示为单个提交

enter image description here

我可以点击它,然后查看生成的差异。
git diff [merge commit]:[merge commit]^

Git文档提到了环境变量GIT_EXTERNAL_DIFFGIT_DIFF_OPTS,听起来像是我正在寻找的内容,但我无法找到任何示例。

1
我还没有尝试过这个,但是git log --first-parent -m -G ... 应该可以实现你想要的搜索。不幸的是,gitk在初始阶段运行了自己独立的git rev-list命令,并且根本不允许你使用��种技巧。它可能需要进行修改,添加一个复选框或单选按钮来选择合并提交时要比较的父提交,以便在查看时进行区分。 - undefined
-m 这个标志使合并提交显示与常规提交相同的完整差异;对于每个合并父节点,都会生成单独的日志条目和差异。唯一的例外是当给出--first-parent选项时,只显示与第一个父节点的差异;在这种情况下,输出表示合并带入当前分支的更改。 - undefined
(我试过了,它有效) - undefined
1
@Alex028502,既然你已经找到了一个可行的解决方案,如果你能将其作为答案发布出来,那将非常受未来读者的欢迎。你也可以接受这个答案,事实上,我们鼓励你在你真诚认为它是最好的解决方案时这样做。 - undefined
2个回答

1
在您已有的命令中添加-m标志:
git log -m --pretty=oneline --first-parent --decorate=no -G keyword origin/master

我将起始点移到了选项的末尾,虽然对于Git来说,只要不在双破折号--之后,您可以将其放在任何地方。

-m选项-将其视为合并的缩写-使git log将合并提交视为多个单独提交的系列,每个提交具有相同的子提交,但每个提交仅具有一个父提交。当与--first-parent结合使用时,它会将合并提交视为普通非合并提交,其第一个父提交为唯一的父提交。在任何情况下,您都会获得差异,然后-G可以搜索。

(不幸的是,这在gitk中不起作用,因为它不直接使用git log。它在内部运行自己的git rev-list,然后自行完成所有其他操作。)


1
另一个可能的选择是,使用Git 2.43(2023年第四季度),"git log"(man)和其他相关命令学会了使用--dd,它是--diff-merges=first-parent -p的简写。
查看提交 7c446ac提交 c8e5cb0提交 be3820c(2023年10月9日)由Sergey Organov(sorganov
(由Junio C Hamano -- gitster --提交 755fb09中合并,2023年10月23日) diff-merges:引入了'--dd'选项
已签署:Sergey Organov
该选项为任何类型的提交提供了一种快捷方式,以请求相对于第一个父提交的差异,具有普遍性。
它被实现为"--diff-merges=first-parent --patch"的纯同义词。
为用户提供了一种快速和通用的方式,以查看合并以及常规提交对分支带来的确切变化。 diff-options现在在其man page中包括: --dd 生成合并和常规提交相对于第一个父提交的差异。
是'--diff-merges=first-parent -p'的快捷方式。

git log现在在其man page中包含以下内容:

如果明确给出了-m-c--cc--dd选项,则包括合并提交


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接