2016-08-10 8 views
1

Я знаю, что могу использовать rerere, чтобы записать разрешение слияния с конфликтами.Как записать «разрешение» неконфликтных слияний?

Но это не помогает мне в моей нынешней ситуации:

Я имел экспериментальную ветвь, которую я слился в мою основную ветвь, используя --strategy ours, отбрасывая любые изменения, которые я сделал, но сохраняя всю историю для будущей ссылки , Изменения в экспериментальной ветви не были связаны ни с какими изменениями в основной ветке, поэтому были никаких конфликтов, и поэтому rerere ничего не записывал.

Теперь я хочу, чтобы перебазировать эту часть моей истории (с использованием --preserve-merges), но так как не было никакого конфликта, Git счастливо повторы слияния с использованием стратегии в по умолчанию, вместо нашей стратегии , что я первоначально использовался. Теперь все изменения от устаревшей экспериментальной ветви заканчиваются в моей переустановленной основной ветке (но я хочу, чтобы они снова были отброшены).

Как я могу научить Git помнить стратегии слияния, которые я использовал, и повторно использовать их при перезагрузке?

+0

Вы не можете: слияния не записывают аргумент '-s', используемый где угодно. Это своего рода незначительный недостаток в Git, поскольку, как вы видели, 'git rebase -preserve-merges' должен повторно выполнять * слияния. Разумеется, вы можете вручную пометить свои слияния (например, с сообщением фиксации), но скрипт rebase не заметит, поэтому вам также нужно будет написать собственный скрипт перезаписи. – torek

ответ

0

Я считаю, что вы хотите заставить рекурсивное слияние. Вы можете сделать это, добавив --no-ff, и будет выполнено слияние.

--no-фф

Создать слияние фиксироваться, даже когда слияние решает как быстрой перемотки вперед. Это поведение по умолчанию при объединении аннотированного (и возможно подписанного) тега.

из git-scm documentation

+0

Что вы описываете, это опция для команды 'merge'. Но у меня возникают проблемы при выполнении «rebase». Существующее объединение слияния уже воссоздано, но с неправильной стратегией слияния. – mkrieger1

+0

А, я вижу, извинения за непонимание. –

1

Вы, вероятно, могли бы запустить git rebase -p -i (интерактивный) и заменить сбор сливается с ручными exec git merge -sours ... вызовов. Примечание. Я не тестировал, работает ли он.

+0

Это, вероятно, сработает, хотя мне придется помнить об этом каждый раз, когда я переустанавливаю, и я не буду сразу замечать, когда забуду это. Вот почему я хочу, чтобы Гит помнил это для меня;) – mkrieger1

1

Вы также можете использовать скрипт git-rehi (отказ от ответственности: написано мной), который имеет именно эту особенность: он обнаруживает ours слияния (путем сравнения дерева хэшей) и воспроизводит их как ours

Есть также другие инструменты вокруг : git-reintegrate, git-remerge и т. Д., Которые вы могли бы проверить, если они это сделают.

 Смежные вопросы

  • Нет связанных вопросов^_^