Вопрос по project, version-control, git, commit – Готовить git сообщения перед фиксацией?

42

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

Естественно, я могу поместить эти сообщения во время коммита, для меня есть разница. И я вижу, что аргумент в пользу git не предназначен для этого. Мне просто интересно об этом.

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

Спасибо

Немного опоздал на вечеринку, но об описании ветки; Проверь этоstackoverflow.com/questions/2108405/branch-descriptions-in-git jsageryd

Ваш Ответ

4   ответа
57

Git может взять сообщение коммита из файла, используя-F или же--file флаги:

git commit -F message.txt

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

Если вы делаете это часто, имеет смысл создать для него псевдоним, например:

done = commit -F message.txt

Так что вы можете просто напечататьgit done чтобы он всегда использовал ваш текстовый файл.

Если вы допустили ошибку и сделали коммит слишком быстро, не обновляя файл сообщений, это не проблема, вы можете просто сделатьgit commit --amend и исправить сообщение в коммите.

ОБНОВИТЬ

-e Флаг также полезен, так как позволяет редактировать сообщение перед фиксацией:

git commit -eF message.txt
Похоже, что мне нужно, наверное. Я принимаю ваш ответ. Однако, если есть еще способы достичь этого, я лично готов услышать. yarun can
Отлично. Есть ли способ, что файл, указанный после -eF, будет автоматически удален / проигнорирован Git? Или я должен добавить строку к?.gitignore iago-lito
@ yaruncan я не знаюне возражаете, если вы не примете и подождите некоторое время janos
@yaruncan Я только что обнаружил что-то новое:-e очень полезно редактировать сообщение перед выполнением коммита. Я обновил свой ответ с этой дополнительной информацией. janos
17

При использовании--file вариант дляgit commit Вы можете передать сообщение через стандартный ввод, используя тире (-) вместо имени файла.

echo "Classy commit message" | git commit --file -
Ну, смысл сообщения в том, что источником этого сообщения может быть любая программа. Это может быть от простой печати содержимого файла до его компиляции из любого мыслимого источника. LopSae
Что ж, спасибо, но это не решает вопрос, это просто еще один способ передачи сообщения, приятно знать, что в любом случае это не решение моего вопроса, если только вы не покажете мне, как это можно использовать для решения моей проблемы. yarun can
0

Я объединил ответыLopSae а такжеЯнош для автоматического удаления всех строк, начинающихся с # из входного текстового файла, командойэта почта.

Результатом является эта команда

cat .git/COMMIT_EDITMSG | sed '/^#/ d' | git commit -F -

И чтобы сделать его короче, я предлагаю добавить псевдоним.

РЕДАКТИРОВАТЬ Создание псевдонима для этой команды было более сложным, чем исключение. Но после некоторых попытокэтот балетный Я создал псевдоним, который работает и поддерживает пользовательские параметры.

[alias]
  commitmsg  = "!f() { myarg=${@}; cat .git/COMMIT_EDITMSG | sed '/^#/ d' | git commit -F - $myarg;  }; f"

Вы можете использовать это, например. с параметром для измененной даты, как это

commitmsg --date "2001-01-02 18:00:00"
1

Если ты'использовать VIM как Git 'с редактором ядра, то при запускеgit commit, VIM будет открыт, и выбудет представлен буфером, содержащим закомментированный выводgit status команда.

Затем вы можете использовать команду VIM:read COMMIT_MSG.txt который вставит содержимое файлаCOMMIT_MSG.txt (ваше предварительно подготовленное сообщение о коммите) в текущей позиции курсора.

Это действительно просто альтернатива бегуgit commit -eF COMMIT_MSG.txt, но лично мне легче запомнить команду VIM:read в отличие от необходимости запоминать еще один аргумент командной строки git. Личные предпочтения, правда.

Это'Стоит отметить, что этот же подход можно использовать практически с любым.$EDITOR Sean Allred

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