Я использую Git из командной строки и пытаюсь добавить разрыв строки в сообщение фиксации (используя git commit -m ""
), не заходя в Vim.
Это возможно?
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
поможет вам избежать vim
.
Я использую Git из командной строки и пытаюсь добавить разрыв строки в сообщение фиксации (используя git commit -m ""
), не заходя в Vim.
Это возможно?
GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e
поможет вам избежать vim
.
Ответы:
Конечно, как это сделать, зависит от вашей оболочки. В Bash вы можете использовать одинарные кавычки вокруг сообщения и просто оставлять цитату открытой, что заставит Bash запросить другую строку, пока вы не закроете цитату. Нравится:
git commit -m 'Message
goes
here'
Кроме того, вы можете использовать «здесь документ» (также известный как heredoc):
git commit -F- <<EOF
Message
goes
here
EOF
git
команда может читать текст сообщения из стандартного ввода, а -F
параметр задает имя файла , чтобы прочитать сообщение от.
Если вы просто хотите, скажем, заголовок и строку содержимого, вы можете использовать:
git commit -m "My head line" -m "My content line."
Обратите внимание, что это создает отдельные абзацы, а не строки. Таким образом, между каждыми двумя -m
строками будет пустая строка , например:
My head line
My content line.
-m
для каждой строки. Ницца!
man git commit
: -m <msg>, --message = <msg> Использовать данное <msg> в качестве сообщения фиксации. Если задано несколько параметров -m, их значения объединяются в отдельные абзацы.
-m
строками будет пустая строка .
Используя Git из командной строки с Bash, вы можете сделать следующее:
git commit -m "this is
> a line
> with new lines
> maybe"
Просто введите и нажмите, Enterкогда вы хотите новую строку, символ «>» означает, что вы нажали Enter, и есть новая строка. Другие ответы работают также.
Вы должны быть в состоянии использовать
git commit -m $'first line\nsecond line'
Из руководства Bash :
Слова вида $ ' string ' обрабатываются специально. Слово расширяется до строки , символы с обратной косой чертой заменяются в соответствии со стандартом ANSI C.
Это включает в себя поддержку новых строк, как показано выше, а также шестнадцатеричные и юникод-коды и другие. Перейдите в связанный раздел, чтобы увидеть список символов с обратной косой чертой.
echo $'one\ntwo'
?
git commit -m "first line"$'\n'"second line"
. Просто отметьте, что вы должны закрыть предыдущую строку перед началом $'string'
.
Добавление разрывов строк в ваш коммит 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 :
-m <msg>
--message = <msg>
Использовать указанное <msg> в качестве сообщения фиксации. Если несколько-m
параметров, их значения объединяются в отдельные абзацы.
Итак, если вы ищете для группировки несколько сообщений коммитов, это должно сделать работу:
git commit -m "commit message1" -m "commit message2"
Я надеюсь, что это не слишком далеко от опубликованного вопроса, но установка редактора по умолчанию и затем использование
git commit -e
может быть гораздо удобнее.
-e
и он все равно откроет редактор
Нет необходимости усложнять вещи. После получения -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 для деталей.
Лично я считаю, что проще всего изменять сообщения коммита после факта vi
(или любого другого выбранного вами git-редактора), а не в командной строке, выполняя git commit --amend
сразу после git commit
.
git commit -e
.
git commit
, и он откроет редактор с шаблоном сообщения фиксации.
Если вы используете 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'
Вот список неудачных решений в 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"
Хотя это также все еще уродливо, оно допускает «однострочные», которые все еще могут быть полезны. Поскольку обычно строки являются переменными или объединяются с переменными, углины могут быть сведены к минимуму.
Я не вижу, чтобы кто-нибудь упоминал, что если вы не предоставите сообщение, оно откроет вам nano (по крайней мере, в Linux), где вы можете написать несколько строк ...
Только это необходимо:
git commit