Почему коммиты слияния, которые вводят одно и то же изменение, не пропускаются из журнала? - PullRequest
0 голосов
/ 08 июня 2018

Опция --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

Этокоммиты вносят то же изменение, что и другой коммит слияния на "другой стороне"

Почему эти коммиты не опущены?

UPD
Из приведенного выше примера я ожидаю только одну строку вывода:

> a3b7230 Clarify schema

1 Ответ

0 голосов
/ 08 июня 2018

Слияние считается расположенным слева от ..., поэтому в выводе графика оно помечено <, а не >.

Для устранения слиянийиз git rev-list или git log выходных данных добавьте --no-merges или --max-parents=1 (это два варианта написания одного и того же параметра).

Редактировать, повторно редактировать вопрос: для "git cherry" и аналогичных целей,каждый merge коммит считается уникальным.То есть он никогда не будет таким же, как любой другой коммит, независимо от того, является ли этот коммит или нет слиянием.(Это происходит по нескольким внутренним причинам, наиболее значительным из которых является то, что в коммите слияния имеется более одного родителя. Чтобы вычислить идентификатор патча , Git необходимо сравнить дочерний коммит с одним родителем.)

(Правка 2: приведенное выше утверждение может быть неправильным: git show <merge> | git patch-id вычисляет идентификатор патча для комбинированного различий слияния. Таким образом, два слияния, которые создают идентичные объединенные различия, могут давать идентичные идентификаторы патчей и, следовательно, считаться "одинаковыми""на git cherry. Однако в большинстве случаев комбинированный diff для коммита слияния не будет совпадать с обычным, а не комбинированным diff для любого коммита, который он объединяет, что означает, что на практике слияния будут выглядеть уникальнымив git cherry или git rev-list --cherry-mark или аналогичном.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...