Черри-выберите слияние

Пусть говорят, что ветка B - это ветвь темы ветки A, и вы хотите, чтобы эти изменения в ветки C. Что это означает, когда вы вишнеобразно выбираете комманду слияния ветки A и ветку B в ветвь C?

Например, если вы используете флаг -m, чтобы указать старый HEAD ветки A для вишни, выберите слияние в ветвь C, означает ли это просто "Возьмем разницу между выбранным вишневым деревом фиксации и старым HEAD ветку A и примените ее к ветки C?"

Есть ли какие-либо ошибки для использования этого метода? (например, будет ли ветвь C похожа на ее объединение с веткой A и B? Будет ли применено больше изменений, чем просто коммит из ветки B?)

Ответ 1

Как обычно я это делаю, используйте git rebase:

git rebase --onto C A B

Это использует различия между A и B и применяет эти различия к ветки C. В качестве бонуса, rebase будет пропускать любые коммиты между A и B, которые выполняют те же текстовые изменения, которые уже существуют в ветки C.

Обновление. В случае, упомянутом в комментариях, помните, что Git никогда не перезаписывает прошлую историю. Таким образом, даже после выполнения вышеперечисленного, вы можете воссоздать новую ветку ветки в коммитке, где раньше находилась Б, до перезагрузки. К сожалению, я не могу придумать простой способ сделать это в это утро. Извините, я не мог больше помочь, возможно, кто-то еще придумает простой способ!