мерзкая вишня не работает для беспорядочных слияний - PullRequest
0 голосов
/ 21 марта 2011

Я попытался использовать git cherry-pick для объединения некоторых коммитов от master, а затем git-cherry, чтобы определить, какие коммиты в настоящее время объединяются. Он отлично работает, пока я сливаю его в том порядке, в котором он находится на master, но когда я пропускаю слияние одного из коммитов, он не показывает мне следующее слияние. Пример ниже:

$ git branch
* branch
  master
$ git log --oneline
46aad17 comment4
56e43b0 comment3
26370b3 comment2
6192fa4 comment1

$ git cherry -v branch master
- 5c5e979707cd6a77ef3ae79627cdd211cad86a28 comment3
- ee0386c78d9e6d21dce7a8bac8e40beef73fb993 comment4
+ 9495c94ece440d9a05c3218f88d1b72a7fd67664 unmerged # this wasn't merged
+ 235b0822f08f351264071e7b2500caa9af997fb8 comment2

Вопрос в том, почему комментарий2 отображается как не объединенный, а он отображается как объединенный в журнале?

1 Ответ

3 голосов
/ 21 марта 2011

Точно так же, как предварительное замечание, немного запутанно описывать их как слияния - это просто вишневые пики, то есть коммиты, созданные путем применения патча, введенного другим коммитом, к новому родителю.

git cherry смотрит на патч, который вводит коммит, и проверяет, есть ли уже аналогичный патч, который был введен в ветке upstream. Как описано в справочной странице git cherry , решение о том, являются ли два исправления одинаковыми, зависит от того, имеют ли они одинаковый «идентификатор исправления» , который описывается как:

«Идентификатор патча» - это не что иное, как SHA1 разницы, связанной с патчем, при этом пропуски и номера строк игнорируются. Как таковой, он «достаточно стабилен», но в то же время также достаточно уникален, то есть два патча с одинаковым «идентификатором патча» почти гарантированно будут одним и тем же.

Итак, вы можете использовать эту вещь для поиска вероятных дублирующих коммитов.

Итак, я подозреваю, что если фиксация, связанная с comment2, не определяется как уже примененная, то это потому, что идентификаторы патчей разные. Это может быть, например, из-за того, что вам пришлось разрешать конфликт при выборе вишни для коммита, связанного с comment2. Это вполне может означать, что патчи, которые вводят коммиты, в конечном итоге будут другими. Вы можете убедиться, что это правильно, сравнив выходные данные этих двух команд:

git show 26370b3
git show 235b082
...