Слияние конфликтов разрушает мое сообщение о совершении сделки,

Мой обычный рабочий процесс с git заключается в создании новой ветки функций, некоторой работы с частыми фиксациями, а затем слияния обратно в ветку разработки, когда эта функция работает и/или стабильна.

Обычно, когда я делаю git merge --squash feature-branch, я получаю приятное сообщение "squashed commit of the following", которое автоматически заполняется всеми сообщениями фиксации из ветки функции.

Однако, если есть какие-либо конфликты слияния (скажем, я закончил и объединил другую функцию во время работы над этим), я, кажется, потеряю все свои сообщения о фиксации из ветки. Автообновленное сообщение фиксации заполняет конфликты, но не передает сообщения. Где мои сообщения о передаче? Могу ли я вернуть их?

Ответ 1

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

Рассмотрим выполнение

git rebase master topic

перед выполнением слияния. Секция DESCTIPTION этой страницы http://git-scm.com/docs/git-rebase должна быть полезна. Это может также избавить от необходимости сквоша в качестве интерактивной перестановки, которая позволит вам для сквош-фиксаций по вашему выбору.

EDIT: Смотрите также: В git, в чем разница между merge -squash и rebase?

Ответ 2

Да, вы можете получить сообщение о фиксации сквоша. Он хранится в .git/SQUASH_MSG.

Вы можете использовать его в качестве шаблона со следующей командой:

git commit -t .git/SQUASH_MSG

Ответ 3

Ничего не потеряно с git. Список коммитов на ветки признаков можно получить, используя:

git cherry feature-branch

Затем просто соедините это с git cat-file:

git cherry feature-branch | cut -f2 -d' ' | git cat-file --batch

Вам нужно очистить выход. Я не знаю, как лучше автоматизировать его.