Скажите, что у меня есть пересмотр, от которого это давным-давно и внесло желательное изменение.
Затем позже, у меня был пересмотр B, который внес много изменений в большом количестве файлов, включая вытирание изменения A.
Теперь, намного позже, я хочу повторно применить пересмотр A. Существует ли хороший способ сделать это? Слияние и команды избирательного подхода, кажется, пропускают изменения, которые являются предками, и я не вижу флагов для игнорирования родословной.
Всегда существует разность/применять, но это - действительно лучший способ? Кажется, что это могло быть "с потерями" (прохождение через посреднического формата патча) и не могло бы позволить мерзавцу использовать все инструменты обычно в его распоряжении..., но это - неинформированная догадка с моей стороны.
Вы можете использовать git checkout $ REVISION, чтобы вернуться к вашей версии (фиксации). Затем вы должны создать новую ветку оттуда.
git.cmd branch YOURCOMMIT
Вы можете использовать кирку, чтобы получить коммиты, необходимые для вашей новой ветки.
git cherry-pick A
сделает именно то, что вы хотите. Он не смотрит на происхождение - он смотрит только на то, какие изменения уже были применены.
Вот пример:
git cherry-pick A
git cherry-pick A
git cherry-pick A
создаст только один новый коммит (максимум). Вторая и третья команды не работают, так как изменения A
уже были применены. Однако команда
git cherry-pick A
git cherry-pick B
git cherry-pick A
git cherry-pick B
создаст четыре новых фиксации. Первый и третий коммиты сделают одно и то же, а второй и четвертый вернут первый и третий (даже если коммит B
внес другие изменения, кроме возврата A
). Другими словами, это то же самое, что и
git cherry-pick A
git revert --no-edit HEAD
git revert --no-edit HEAD
git revert --no-edit HEAD
Надеюсь, это поможет.