как я могу настроить сообщение о фиксации слияния мерзавца?

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

Мой вопрос состоит в том, как может я форматировать git-fmt-merge-msg или что определяет это автоматизированное сообщение (я могу сделать это вручную после фиксации путем исправления его и использования журнала мерзавца - pretty=format: '...')

Например, я хотел бы отформатировать его как таковой:

 Merge branch 'test'  
    * test:  
      [BZ: #123] fifth commit subject  
      [BZ: #123] fourth commit subject  
      [BZ: #123] third commit subject  
      [BZ: #123] second commit subject  
      [BZ: #123] first commit subject  

 __________________________________________
 Merge details:  
     [BZ: #123] fifth commit subject  
               at 2010-06-30 11:29:00 +0100  
       - fifth commit body  

     [BZ: #123] fourth commit subject  
               at 2010-06-30 11:22:17 +0100  
       - fourth commit body  

     [BZ: #123] third commit subject  
               at 2010-06-30 11:21:43 +0100  
       - third commit body  

     [BZ: #123] second commit subject  
               at 2010-06-30 11:21:30 +0100  
       - second commit body  

     [BZ: #123] first commit subject  
               at 2010-06-30 11:29:57 +0100  
       - first commit body
68
задан shil88 24 August 2018 в 02:46
поделиться

3 ответа

Вы можете попробовать определить ловушку prepare-commit-msg (пример действительно генерирует некоторые настраиваемые «сообщения фиксации по умолчанию»)

4
ответ дан 24 November 2019 в 14:16
поделиться

Теперь есть опция - log для git-merge , которая выполняет половину что вы хотите - он помещает короткий журнал (сводки фиксации) в сообщение слияния. Однако полное решение должно будет использовать хук, как в ответе VonC.

6
ответ дан 24 November 2019 в 14:16
поделиться

Я обнаружил, что есть два способа решения этой проблемы

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

личное примечание : я использую первое решение, поскольку оно полностью полагается на хуки и свойства конфигурации git, а не на внешний скрипт.
Для реального решения нужно было бы расширить команду git с именем 'fmt-merge-msg', которая генерирует однострочные описания при передаче параметра --log (если вам действительно нужно это решение, вам придется создать свой собственный патч (для git) и скомпилируйте его из исходного кода).

1. используя сообщение prepare-commit-message, как предложил VonC
, это решение имеет проблему, заключающуюся в том, что вам нужно прервать фиксацию, а затем выполнить фиксацию вручную

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

[alias]  
lm = log --pretty=format:'%s%n   by %C(yellow)%an%Creset (%ad)%n %n%b' --date=local

создание Ловушка prepare-commit-msg путем создания исполняемого файла prepare-commit-msg в $ GIT_DIR / hooks / (пример сценария ниже)

#!/bin/sh
#...

case "$2,$3" in  
  merge,)  
  echo "Merge details:" >> $1  
  echo "" >> $1  
  git lm ORIG_HEAD..MERGE_HEAD >> "$1" ;;  
*) ;;  
esac  

следует определить псевдоним commit msg, такой как

[alias]  
m = merge --no-ff --no-commit

2. с помощью специальной команды, которая автоматически сгенерирует слияние
(с использованием псевдонима lm, созданного в 1.)

#!/bin/sh

echo ""
echo "merge with commit details -- HEAD..$1"
git merge --no-ff --no-log -m "`git lm HEAD..$1`" --no-commit $1

, а затем выполните довольно жесткую команду:

./cmd-name <branch to merge>

, если вы все еще хотите иметь однострочное описание коммитов, вы вам нужно будет добавить новые команды или что-то еще в аргумент -m (если вы используете --log, он будет сгенерирован внизу)

16
ответ дан 24 November 2019 в 14:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: