Восстановление нарушенного слияния и повторное применение выбранных коммитов с помощью Git

Недавно мы столкнулись с проблемой, когда слияние каким-то образом привело к тому, что все изменения, ведущие к одному из родителей, были отменены в коммите слияния, и несколько коммитов были применены после этого момента. Все это было перенесено в наш общий исходный репозиторий. Я хочу иметь возможность отменить неудачное слияние и повторно применить другие наборы изменений. Какой самый простой способ сделать это?

Пример ASCII-искусства:

    A-B-C-D
   /       \
P-Q         M-X-Y-Z
   \       /
    1-2-3-4

  ---time--->

Коммит M включил изменения с A по D, но все изменения с 1 по 4 были отменены этим коммитом.

Я хотел бы иметь возможность вернуться назад, например, к набору изменений 4, и заново применить изменения A-D и X-Z, в идеале без ручной переделки каждого изменения.

Если это невозможно, я хотел бы услышать о лучших обходных путях - например, может быть, сделать ответвление от 4, слиться с D, снова соблюдая осторожность, чтобы ничего не сломать, а затем вручную повторно применить X к Z?

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

8
задан Kylotan 4 February 2012 в 14:02
поделиться