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

时间:2018-06-08 15:01:02

标签: 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_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

如果我只想查看新提交,我添加--left-only选项并在输出中获取合并提交。

<   bc2820d (openapi3) Merge branch 'openapi3_exception_handling' into 
<   aa60f0a Merge branch 'hide_temporal_interface' into openapi3

这提交在&#34;另一方&#34;

上引入与另一个合并提交相同的更改

为什么不省略这些提交?

UPD
从上面的例子中我只期望输出一行:

> a3b7230 Clarify schema

1 个答案:

答案 0 :(得分:2)

合并本身被认为位于...的左侧,这也是图表输出中标有<而不是>的原因。

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

编辑,重新提问编辑:for&#34; git cherry&#34;和类似的目的,每个 merge 提交都被认为是唯一的。也就是说,它永远不会与任何其他提交相同,无论其他提交是否合并。 (这有多种内部原因,最重要的是合并提交有多个父级。要计算补丁ID ,Git需要将子提交与单个父级进行比较。)

(编辑2:上述声明可能有误:git show <merge> | git patch-id计算合并的组合差异的补丁ID。因此,产生相同组合差异的两个合并可能会生成相同的补丁ID,因此可以考虑& #34;相同的&#34;由git cherry。但在大多数情况下,合并提交的组合差异不会与它合并的任何提交的常规,非组合差异相匹配,这意味着在实践中,合并在git cherrygit rev-list --cherry-mark或类似内容中会显得唯一。)