Git повторить без разрешения конфликтов слияния снова

Можно ли изменить сообщения фиксации с помощью git rebase, но без повторного разрешения конфликтов слияния?

Мне нужно поклониться более старому репо, и я не хочу менять какой-либо код, а только сообщения.

Я пробовал --preserve-merges.

Ответ 1

Есть малоизвестная особенность git под названием "Повторное использование записанных разрешений", или rerere.

Вы можете включить его глобально, запустив git config --global rerere.enabled true.

Если rerere включен, git автоматически сохраняет разрешения конфликтов и будет использовать эти разрешения позже, если столкнется с такими же конфликтами. Это приводит к тому, что пользователь не требует повторного разрешения этих ранее обнаруженных конфликтов.

Функция объясняется здесь - Git - Rerere.

Документация для команды git rerere находится здесь - git-rerere (1).

Ответ 2

Примечание: поскольку сценарий contrib/rerere-train.sh должен переобучать переосмысление (вы можете увидеть переобучение вручную здесь)

Чтобы rerere забыл все свое текущее разрешение перебазировки, теперь у вас есть официальная опция с Git 2.14.x/2.15 (3 квартал 2017 года) для contrib/rerere-train: флаг --overwrite.

Смотрите коммит ad53bf7 (26 июля 2017 г.) от Рамана Гупты (rocketraman).
(Merged by Junio C Hamano -- [TG45] -- in commit aec68c3, 11 Aug 2017)

contrib/rerere-train: при желании перезаписать существующие разрешения

Предоставьте пользователю возможность перезаписывать существующие разрешения, используя --overwrite флаг.

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