Git шаблон коммита не отображается при наборе sh N-коммитов - PullRequest
1 голос
/ 18 апреля 2020

У меня есть путь установки к файлу шаблона в моем файле конфигурации, и он отлично работает, когда я делаю basi c commit (git add -A . && git commit):

[commit]
        template = .git-commit-template.txt

Вместо этого, когда я пытаюсь Чтобы squa sh N-коммитов, а также добавлять свои сообщения, мой шаблон коммитов не отображается.

=> Есть ли способ добавить git шаблон сообщения во время сдавливания последних N коммитов?


То, как я сква sh мои последние 2 коммиты с помощью этого ответа : { ссылка }

Если вы хотите начать редактирование нового сообщения фиксации с конкатенацией существующих сообщений фиксации:
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})"

#!/bin/bash

git reset --soft HEAD~2
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1})" # template message does not show up

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

git reset --hard HEAD~2 && git merge --squash HEAD@{1} && git commit

Ответы [ 2 ]

1 голос
/ 22 апреля 2020

Я искал что-то следующее, где мне нужно напечатать шаблон сообщения, используя $(cat .git_commit_template.txt):

Обновленный код:

git reset --soft HEAD~2
git commit --edit -m"$(git log --format=%B --reverse HEAD..HEAD@{1}) $(cat .git_commit_template.txt)"
git push -f
1 голос
/ 19 апреля 2020

Аргумент -m, который вы указали в примере команды , переопределяет ваш шаблон.

Возможно, вы захотите написать небольшой скрипт, который:

  • читает ваш шаблон;
  • запускает нужную команду git log;
  • вставляет вывод git log в определенное местоположение шаблона (возможно, используя синтаксис вашего собственного изобретения в шаблоне);
  • записывает полученный файл куда-нибудь как временный файл;
  • вызывает git commit --edit -F /path/to/temporary/file вместо git commit --edit -m ...;
  • удаляет временный файл при возврате самого git commit;
  • выходит со статусом выхода команды git commit.

Обратите внимание, однако, что git merge --squash подчиняется ручке конфигурации merge.log, которая может быть близка к той, которую вы хотите. Вы можете запустить git -c merge.log=20 merge --squash .... Недостатком является то, что это формат %s, а не %B: вы получаете только строки темы.

...