Слияние конфликтов разрушает мое сообщение о совершении сделки,
Мой обычный рабочий процесс с 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
Вам нужно очистить выход. Я не знаю, как лучше автоматизировать его.