2013-12-07 4 views
26

Возможно ли подготовить сообщение фиксации до фиксации, что означает, что я наберу свое сообщение о фиксации до фактического фиксации или во время работы, чтобы я знал, над чем я работаю, и знаю, что эта ветка или фиксация будет все. Когда я говорю «раньше», я не имею в виду только пару секунд, прежде чем я войду в фиксацию в командной строке. Я буквально имею в виду сразу после фиксации или при начале ветви, чтобы следующая фиксация автоматически наследовала сообщение в очереди или то, что когда-либо могло быть вызвано.Подготовка сообщения git commit перед совершением?

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

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

благодаря

ответ

39

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

git commit -F message.txt 

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

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

done = commit -F message.txt 

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

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

UPDATE

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

git commit -eF message.txt 
+0

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

+0

@yaruncan Я не возражаю, если вы не принимаете и ждете некоторое время – janos

+0

janos можно создать примечание txt на основе ветки? Например, я хотел бы иметь возможность «git checkout -b mynewbranch», а затем эта команда создает ветвь плюс текстовый файл «mynewbranch.commit»? Я пробовал somethign с псевдонимами, но не добился этого. Любые решения? –

14

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

echo "Classy commit message" | git commit --file - 
+0

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

+4

Ну, точка, на которую подается сообщение, заключается в том, что источником указанного сообщения может быть любая программа. Это может быть просто печать содержимого файла на их компиляцию из любого воображаемого источника. – LopSae

0

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

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

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

0

Я объединил ответы LopSae и janos, чтобы автоматически удалить все строки, начинающиеся с # из входного текстового файла с командой от this post.

Результат этой команды

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

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

EDIT Создание псевдонима для этой команды было более сложным, чем exspeced. Но после некоторых попыток и с помощью this tuturial Я создал псевдоним, который работает и поддерживает пользовательские параметры.

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

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

commitmsg --date "2001-01-02 18:00:00" 
Смежные вопросы