Как настроить формат 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, когда захотите. Вы можете проверить в фиксации, который вы совершили, и хотите изменить его и изменить.