Как я могу сделать фиксацию вишни C4
и C5
?Git диапазон вишневого выбора
Я попытался git cherry-pick C4..C5
, но я только получаю C4
. Я думаю, что я действительно не понимаю, как работает этот диапазон.
Как я могу сделать фиксацию вишни C4
и C5
?Git диапазон вишневого выбора
Я попытался git cherry-pick C4..C5
, но я только получаю C4
. Я думаю, что я действительно не понимаю, как работает этот диапазон.
TL; DR версия: C4^..C5
Если только команду лечит это специально (и git cherry-pick
не делает), выражение диапазона означает «принять все коммиты определены/обнаружимого по имени правой стороны, за вычетом всех коммитов определены/можно найти по левому названию ». В этом случае C5
идентифицирует значения от 0 до 5 включительно, а C4
идентифицирует от 0 до 4 включительно. Вычитание второго набора коммитов из первого набора оставляет вас только C5
.
Другой способ взглянуть на это состоит в том, что если коммиты связаны, вы получаете «полуоткрытый интервал», точно так же, как целые числа в (3, 7]
равны 4 5 6 7
.
Как и в случае полуоткрытого целочисленного интервала, обычный простой трюк - начать с одного шага назад. Поскольку (первый) родительский номер C4
равен C4^
, C4^..C5
делает трюк, точно так же, как (2, 7]
доставит вас 3 4 5 6 7
.
(Это не удается, если нет родителя, то есть левая сторона является корневой фиксацией. В этом случае вам нужна какая-то альтернативная стратегия. Некоторые команды делают это проще, некоторые делают это сложнее, но на данный момент мы можем просто игнорировать проблема. :-))
В этом конкретном случае вам не нужно использовать диапазон.
Пример из man git-cherry-pick
:
git cherry-pick master~4 master~2
Apply the changes introduced by the fifth and third last commits pointed to by master and create 2 new commits with these changes.
Так что для вас:
git cherry-pick C4 C5
Большое спасибо за ваш ответ. Работает отлично, но я думаю, что в реальном мире мне нужно будет работать с диапазонами (потому что будет не более двух коммитов). – musium
На самом деле, я когда-либо «вишневый», только когда перепутал. Вместо того, чтобы «вишневый выбор» на диапазонах, я бы предпочел «перебазировать», если это возможно. – Gauthier
hmm .. Я не знаю, может ли мой сценарий реального мира быть выполнен с использованием rebase ... Я создаю новый вопрос, описывающий «целую» проблему, которую я пытаюсь решить. – musium
Большое спасибо вам ответить. Кажется, я понимаю, как это работает сейчас. C4 и C5 выполнены на ветке b1. Есть ли способ вишни - выбрать все фиксации, сделанные для ветки b1? – musium
Обычно вы не хотите, чтобы все * совершалось с меткой ветки, недоступной от 'HEAD' (если вы делаете это, имеет смысл слить, возможно, с помощью' --no-ff', чтобы заставить истинное слияние). Однако, если вы этого хотите, вы можете использовать тот факт, что в 'A..B' нет требования, чтобы' A' был предком 'B'. Например, если 'b1' указывает на фиксацию' C5', и вы хотите, чтобы все коммиты оттуда вернулись к корню, минус любые фиксации уже на 'HEAD', тогда' HEAD..b1' делает трюк. – torek