Я использую Git из командной строки и пытаюсь добавить разрыв строки в сообщение коммита (используя git commit -m ""
), не заходя в Vim.
Это возможно?
Я использую Git из командной строки и пытаюсь добавить разрыв строки в сообщение коммита (используя git commit -m ""
), не заходя в Vim.
Это возможно?
Конечно, как это сделать, зависит от вашей оболочки. В Bash вы можете использовать одинарные кавычки вокруг сообщения и просто оставлять цитату открытой, что заставит Bash запросить другую строку, пока вы не закроете цитату. Как это:
git commit -m 'Message
goes
here'
В качестве альтернативы вы можете использовать "здесь документ" (также известный как heredoc):
git commit -F- <<EOF
Message
goes
here
EOF
Если вы просто хотите, скажем, строку заголовка и строку содержимого, вы можете использовать:
git commit -m "My head line" -m "My content line."
Используя Git из командной строки с Bash, вы можете сделать следующее:
git commit -m "this is
> a line
> with new lines
> maybe"
Просто введите и нажмите Enter, если вы хотите новую строку, символ ">" означает, что вы нажали Enter, и появилась новая строка. Другие ответы работают также.
Вы должны иметь возможность использовать
git commit -m $'first line\nsecond line'
В Bash manual:
Слова формы $'string' обрабатываются специально. Слово расширяется до строка с замененными символами с обратной косой чертой, как указано в Стандарт ANSI C.
Это включает поддержку новых строк, как показано выше, плюс шестнадцатеричный код и коды Unicode и другие. Перейдите в связанный раздел, чтобы просмотреть список символов с обратным слэшем.
Добавление разрывов строк в ваш коммит Git
Попробуйте сделать следующее, чтобы создать многострочное сообщение о коммите:
git commit -m "Demonstrate multi-line commit message in Powershell" -m "Add a title to your commit after -m enclosed in quotes,
then add the body of your comment after a second -m.
Press ENTER before closing the quotes to add a line break.
Repeat as needed.
Then close the quotes and hit ENTER twice to apply the commit."
Затем проверьте, что вы сделали:
git log -1
У вас должно получиться что-то вроде этого:
Снимок экрана взят из примера, который я настроил с помощью PowerShell с Poshgit.
Делать что-то вроде
git commit -m"test\ntest"
не работает, но что-то вроде
git commit -m"$(echo -e "test\ntest")"
работает, но не очень красиво. Вы установили команду git-commitlb
в вашем PATH
, которая делает что-то вроде этого:
#!/bin/bash
message=$1
git commit -m"$(echo -e "$message")"
И используйте это так:
git commitlb "line1\nline2\nline3"
Слово предупреждения, у меня такое ощущение, что общее соглашение состоит в том, чтобы в качестве первой строки в качестве строки с краткой записью использовались две строки, а затем в сообщении коммита добавлялось расширенное сообщение. условность. Конечно, вы могли бы сделать:
git commitlb "line1\n\nline2\nline3"
Я надеюсь, что это не слишком далеко от опубликованного вопроса, но устанавливает редактор по умолчанию и затем использует
git commit -e
может быть намного удобнее.
Из документации Git:
-m & lt; msg & gt;
- -m essage = & л; тзд & GT;
Используйте указанный & lt; msg & gt; как сообщение о коммите. Если задано несколько опций-m
, их значения объединяются в отдельные абзацы.
Итак, если вы ищете группирование нескольких сообщений коммита, это должно сработать:
git commit -m "commit message1" -m "commit message2"
Нет необходимости усложнять вещи. После -m "text...
следующая строка получается нажатием Enter. При нажатии Enter появляется >
. Когда вы закончите, просто поместите "
и нажмите Enter:
$ git commit -m "Another way of demonstrating multicommit messages:
>
> This is a new line written
> This is another new line written
> This one is really awesome too and we can continue doing so till ..."
$ git log -1
commit 5474e383f2eda610be6211d8697ed1503400ee42 (HEAD -> test2)
Author: ************** <*********@gmail.com>
Date: Mon Oct 9 13:30:26 2017 +0200
Another way of demonstrating multicommit messages:
This is a new line written
This is another new line written
This one is really awesome too and we can continue doing so till ...
Я использую zsh на Mac и могу публиковать многострочные сообщения в двойных кавычках ("). По сути, я продолжаю набирать и нажимать клавишу возврата для новых строк, но сообщение не отправляется в Git, пока я не закрою кавычки и не вернусь ,
В Bash/Zsh вы можете просто использовать разрывы строк в кавычках:
git commit -m 'Multi-line
commit
message'
Цитирование ANSI-C также работает в Bash/Zsh:
git commit -m $'Multi-line\ncommit\nmessage'
Вы также можете указать Git использовать редактор по вашему выбору для редактирования сообщения коммита. Из документов git-commit:
Редактор, используемый для редактирования сообщения журнала фиксации, будет выбран из Переменная среды
GIT_EDITOR
, конфигурацияcore.editor
переменная, переменная окруженияVISUAL
илиEDITOR
переменная окружения (в таком порядке). Смотрите git-var для подробностей.
Если вы используете Bash, нажмите C-x C-e
(Ctrl + x Ctrl + e), и он откроет текущую команду в выбранном вами редакторе.
Вы можете изменить предпочтительный редактор, настроив VISUAL
и EDITOR
.
Это то, что у меня есть в .bashrc
:
export ALTERNATE_EDITOR=''
export EDITOR='emacsclient -t'
export VISUAL='emacsclient -c'
export SUDO_EDITOR='emacsclient -t'
Лично мне легче всего модифицировать сообщения фиксации после факта в vi
(или независимо от вашего выбора в редакторе git), а не в командной строке, выполнив git commit --amend
сразу после git commit
.
Вот список неудачных решений в Windows со стандартной оболочкой cmd.exe (чтобы сэкономить время проб и ошибок!):
git commit -m 'Hello
Enter не работает: не будет запрашивать новую строку
git commit -m "Hello
Enter То же самое
git commit -m "Hello^
Enter То же самое
git commit -m 'Hello^
Enter World'
выглядит как работающий, потому что спрашивает "Еще?" и позволяет написать новую строку, но, наконец, при выполнении git log
вы увидите, что это все еще однострочное сообщение...
TL; DR. Даже если в Windows синтаксический анализ командной строки работает по-другому, а ^
допускает многострочный ввод, здесь это не поможет.
Наконец, git commit -e
, вероятно, лучший вариант.
К сожалению, git, похоже, не учитывает символ новой строки в своем сообщении. Выше уже есть несколько разумных решений, но при написании сценариев это раздражает. Здесь также работают документы, но они могут быть слишком раздражающими (например, файлы yaml)
Вот что я сделал:
git commit \
--message "Subject" \
--message "First line$(echo)Second line$(echo)Third Line"
Несмотря на то, что это все еще безобразно, оно допускает использование "однострочников", что может быть полезным. Поскольку обычно строки являются переменными или объединяются с переменными, углины могут быть сведены к минимуму.