Git 为什么日志中不会忽略引入相同更改的合并提交?

Git 为什么日志中不会忽略引入相同更改的合并提交?,git,git-log,Git,Git Log,--cherry pick选项说明: 忽略与“另一端”上的另一个提交引入相同更改的任何提交 对于下一个git命令,我看到下一棵树: $ git log --graph --decorate --pretty=oneline --abbrev-commit --cherry-mark --boundary --left-right bc2820d...b8d09ce < bc2820d (openapi3) Merge branch 'openapi3_exception_handli

--cherry pick
选项说明:

忽略与“另一端”上的另一个提交引入相同更改的任何提交

对于下一个git命令,我看到下一棵树:

$ git log --graph --decorate --pretty=oneline --abbrev-commit --cherry-mark --boundary --left-right bc2820d...b8d09ce

<   bc2820d (openapi3) Merge branch 'openapi3_exception_handling' into openapi3
|\
| = 4e1e0aa Testcase for not_found/exception requests to api
| = b39673d 'not_found' templates should not be probed automatically. Only when fallback
| = a8677df Dump empty schemas and non empty data
| = 27db48f Implemente before_render hook
|/
<   aa60f0a Merge branch 'hide_temporal_interface' into openapi3
|\
| = 5dd02f2 Mutate current object after update
| = d58c0ab Install missed modules
|/
| >   b8d09ce (xtucha/openapi3) Merge branch 'openapi3_exception_handling' into openapi3
| |\
| | = b6362ad Testcase for not_found/exception requests to api
| | = dc926cc 'not_found' templates should not be probed automatically. Only when fallback
| | = 55dc88d Dump empty schemas and non empty data
| | = 8369185 Implemente before_render hook
| |/
| >   c03438d Merge branch 'hide_temporal_interface' into openapi3
| |\
| | = d534cc4 Mutate current object after update
| | = 1b6af27 Install modules required by MonkeyMan
| |/
| > a3b7230 Clarify schema
|/
o f5b06ed Assign some defaults
此提交引入与“另一端”上的另一个合并提交相同的更改

为什么不省略这些提交?

UPD
从上面的示例中,我只希望有一行输出:

> a3b7230 Clarify schema

合并本身被认为位于
..
的左侧,这也是为什么在图形输出中它被标记为
的原因

要从
git rev list
git log
输出中消除合并,请添加
--no merges
--max parents=1
(这是同一选项的两种拼写)

编辑,重新提问编辑:出于“git cherry”和类似目的,每个合并提交都被认为是唯一的。也就是说,无论其他提交是否为合并,它都与任何其他提交不同。(发生这种情况有多个内部原因,最重要的是合并提交有多个父项。要计算补丁ID,Git需要将子提交与单个父项进行比较。)


(编辑2:上述声明可能是错误的:
git show | git patch id
为合并的组合diff计算补丁id。因此,产生相同组合diff的两个合并可能会产生相同的补丁id,因此被视为“相同”但是,在大多数情况下,合并提交的组合差异与它合并的任何提交的常规、未组合的差异都不匹配,这意味着在实践中,合并将在
git cherry
git rev list--cherry mark
或类似文件中显示唯一。)

如果您注意到相同的合并在一侧标记为<,在另一侧标记为>。这些合并提交引入相同的更改,因此必须标记为“=”。在这个问题中,我比较了两个具有合并提交的分支。我用bitAh澄清了一个问题。计算更改集时,合并提交与非合并提交的处理方式不同。特别是cherry pick只会忽略或拒绝合并,除非您事先告诉Git您关心合并的哪一方。因此,出于git日志的目的,所有合并都是唯一的,与任何其他提交都不一样。在重定基址时,我还使用了
--preserve merges
选项。因此,我关心合并是如何显示的。在检查历史树之后,我检查添加/删除哪些提交。我不使用
--no merges
选项,因为我担心在比较的分支上某些合并提交可能会有所不同。不幸的是,我不知道也无法想象git count合并Uniqi的内部原因。如果您想获得提交的补丁ID,可以使用
git patch ID
命令:对其运行
git diff
,而不是相应的父级,或者
git show
如果是单亲提交。事实证明,
git show | git patch id
将使用组合提交来计算合并的补丁id,但由于组合的diff忽略了一些文件,因此您还是希望diff与正确的父项相对应。
> a3b7230 Clarify schema