Как настроить формат git rebase -interactive commit messages?

Я использую git для своей локальной работы (и люблю ее так много), и я следую документообороту, подобному описанному в этой статье. Таким образом, в основном, когда вы начинаете новую функцию, я создаю для нее ветку, прохожу через обычный хак, а затем фиксирую цикл, и когда я думаю, что я закончил с этим, я выкалываю его в одну фиксацию с помощью git rebase --interactive master и Я всегда редактирую множество сообщений фиксации в нечто похожее на пример в статье, воспроизведенный здесь:

[#3275] User Can Add A Comment To a Post

* Adding Comment model, migrations, spec
* Adding Comment controller, helper, spec
* Adding Comment relationship with Post
* Comment belongs to a User
* Comment form on Post show page

Конечно, после кучи удаления строк # This is the xth commit message и копирования/вставки * перед каждым сообщением фиксации.

Теперь, что мне было интересно, , есть ли способ настроить, как git rebase -i выводит сжатые сообщения фиксации, поэтому мне не нужно делать все эти взломы?

(Я использую msysgit, если это имеет значение. Мой редактор Notepad ++.)

Спасибо!

Ответ 1

Невозможно (не взломать источник), чтобы изменить шаблон сквош-сообщения, я не думаю. Однако у вас есть несколько вариантов:

  • Используйте команду журнала git, чтобы получить список, что-то вроде `git log --pretty = "*% s" commit-1..commit-2, чтобы получить ваши пули. В linux это очень возможно сделать изнутри вашего редактора - не знаю, как это работает с msysgit.

  • Попросите вашего редактора выполнить эту работу за вас! Я не знаю, что у вас в редакторе, поэтому я не могу сказать вам, что делать, но это было бы очень возможно в vim. (Идея: поиск /# This is the .* commit message/, удаление пары строк, сохранение одного, удаление до следующего комментария)

Кроме того, это не то, что вы хотите в этом случае, возможно, но в довольно недавних версиях git, есть идентификатор fixup, который вы можете использовать вместо squash - он делает то же самое, но он отбрасывает commit, поэтому, если у вас есть одна фиксация с реальным сообщением, а затем десять исправлений, вы можете просто пометить все их исправления и не удалять их отложенные сообщения.

Ответ 2

Запуск Git 2.6+ (Q3 2015), на самом деле будет способ настроить сообщение Git rebase -i commit.

См. commit 16cf51c (13 июня 2015 г.) Майкл Раппаццо (rappazzo).
(объединено Junio ​​C Hamano - gitster - в commit 9f56db7, 03 августа 2015 г.)

git-rebase--interactive.sh: добавьте параметр конфигурации для пользовательского формата инструкции

Параметр конфигурации < rebase.instructionFormat 'может переопределять формат по умолчанию <oneline "списка инструкций по перестановке.

Поскольку список анализируется с использованием левой, правой или граничной метки плюс sha1, они добавляются в формат инструкции.

Скоро у вас будет новая конфигурация:

rebase.instructionFormat

Строка формата, как указано в git log, которая будет использоваться для списка инструкций во время интерактивной перестановки.
В формате будет автоматически добавлен длинный хеш-хеш к формату.

Например:

git config --add rebase.instructionFormat "[%an @ %ar] %s"

Обратите внимание, что после выпуска этой функции есть ошибка/регрессия:
См. "Комментарий в инструкции по перестановке стал слишком жестким "

Я заметил, что формат строк комментариев в таблице инструкций по перестановке стал более строгим - он больше не мог начинаться с пробелов или вкладок. В первом столбце должен появиться комментарий char ( "#" ).


Jefromi комментарии ниже:

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

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

Таким образом, это не идеально подходит для OP.

Ответ 3

Вы можете сделать -amend, когда захотите. Вы можете проверить в фиксации, который вы совершили, и хотите изменить его и изменить.