2

При использовании git merge с опцией, которая подавляет автоматическую фиксацию (--no-commit или --squash), git очевидно, всегда генерирует свой собственный шаблон для следующего сообщения фиксации; следующий git commit игнорирует опцию -t . Есть ли способ подавить это?

Лучший обходной путь, который я нашел, - это использовать -m с коммитом, а затем сразу запустить git commit --amend . Это кажется мне неудобным и лишает возможности отмены фиксации, удаляя шаблон сообщения фиксации перед сохранением.

1 ответ1

3

Если вы проверили содержимое каталога .git после выполнения git merge --squash вы увидите файл SQUASH_MSG который содержит шаблон сообщения о коммите . Этот файл также создается после выполнения сквоша с помощью git rebase -i . Вам нужно удалить этот файл, если вы не хотите, чтобы Git автоматически заполнял сообщение о коммите при выполнении git commit . Если для псевдонима было бы полезно использовать собственную команду git commit сделать это автоматически за вас, но это невозможно с Git. Вместо этого мы должны создать такой псевдоним в ~/.gitconfig:

[alias]
         kommit = "!KOMIT_GIT_DIR=$(git rev-parse --git-dir); if [ -a "${KOMIT_GIT_DIR}/SQUASH_MSG" ] ; then rm "${KOMIT_GIT_DIR}/SQUASH_MSG" ; fi && git commit"

Эта строка проверяет, существует ли SQUASH_MSG и удаляет ли она перед выполнением git commit . Теперь вы должны делать git komit вместо git commit после выполнения git merge --squash .

Я проверил это с помощью Git 2.3.1:

$ git --version
git version 2.3.1

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .