Добавьте разрыв строки в 'git commit -m' из командной строки

461

Я использую git из командной строки и пытаюсь добавить разрыв строки в сообщение фиксации (используя git commit -m ""), не переходя в vim.

Возможно ли это?

  • 5
    Как примечание, вот ссылка, которая суммирует хорошие соглашения о коммитах - github.com/erlang/otp/wiki/Writing-good-commit-messages, если это кому-то помогает.
  • 1
    Что-то вроде GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e поможет вам избежать vim .
Теги:

13 ответов

410
Лучший ответ

Конечно, как это сделать, зависит от вашей оболочки. В bash вы можете использовать одинарные кавычки вокруг сообщения и просто оставить цитату открытой, что сделает приглашение bash для другой строки, пока вы не закроете цитату. Вот так:

git commit -m 'Message
goes
here'

В качестве альтернативы вы можете использовать "здесь документ":

git commit -F- <<EOF
Message
goes
here
EOF
  • 43
    В ответе Питера Фармера позже упоминается, что соглашение Git выглядит примерно так: 1 строка для резюме, два переноса строки, затем подробное сообщение.
  • 4
    Также см. Ниже сообщение от @esse. Простой возврат каретки делает свое дело.
Показать ещё 11 комментариев
336

Используя git в командной строке с помощью bash, вы можете сделать следующее:

git commit -m "this is
> a line
> with new lines
> maybe"

Просто введите и нажмите Enter, когда вы хотите новую строку, символ " > " означает, что вы нажали Enter, и появилась новая строка. Другие ответы также работают.

  • 5
    Ответ Абизерна объяснил мне, почему это работает - оболочка Bash интерпретирует нажатие клавиши <kbd> Enter </ kbd> как новую строку, пока первый символ двойной кавычки не будет «закрыт» (с последующим символом двойной кавычки).
  • 1
    Я должен согласиться, что это гораздо более эффективное, простое и практичное решение, чем принятый ответ. Это хорошо работает для меня, используя Git 1.8.2.1. +1 от меня.
Показать ещё 7 комментариев
277

Если вы просто хотите, скажем, строку заголовка и строку содержимого, вы можете использовать:

git commit -m "My head line" -m "My content line."
  • 0
    При использовании gitk это отображается как отдельные сообщения, но спасибо, что оно работает.
  • 70
    Это дает преимущество работы в Windows, где приемы цитирования, упомянутые в другом месте, не работают. Отдельный -m для каждой строки. Ницца!
Показать ещё 9 комментариев
78

Вы должны иметь возможность использовать

git commit -m $'first line\nsecond line'

В Bash manual:

Слова формы $'string' обрабатываются специально. Слово расширяется до строка с замененными символами с обратной косой чертой, как указано в Стандарт ANSI C.

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

  • 5
    Не работал для меня: /
  • 0
    @rsy: Какую версию Bash вы используете? Что вы видите, когда делаете echo $'one\ntwo' ?
Показать ещё 6 комментариев
64

Добавление разрывов строк к вашему git commit

Попробуйте создать сообщение с несколькими строками:

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

У вас должно получиться что-то вроде этого:

Изображение 3888

Снимок экрана - это пример, который я установил с помощью Powershell с Poshgit.

  • 7
    Потрясающий ответ. Я искал это целую вечность и пробовал множество различных способов форматировать мои сообщения Git commit, но это работает лучше всего. Я могу подтвердить, что он работает в командной строке с Git 1.8.2.1.
  • 1
    В Powershell вы можете сделать `n для разрыва строки
Показать ещё 3 комментария
35

Выполнение чего-то вроде:

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"
  • 6
    +1 это было то общее собрание, которое заставило меня посмотреть этот маршрут. Спасибо
18

Я использую zsh на Mac, и я могу отправлять сообщения с несколькими строками в двойных кавычках ("). В основном я продолжаю печатать и нажимать return для новых строк, но сообщение не отправляется на git, пока я не закрою кавычки и возврат.

  • 7
    Вы можете сделать то же самое в Bash.
12

Я надеюсь, что это не ведет слишком далеко от поставленного вопроса, но не будет настройка редактора по умолчанию, а затем с помощью

git commit -e

будет намного комфортнее?

  • 1
    Этот должен быть лучшим ответом.
  • 2
    вы можете оставить -e и он все равно откроет редактор
Показать ещё 1 комментарий
10

Из git документация

-m <msg>
--message = < тзд >
Используйте заданный <msg> как сообщение фиксации. Если задано несколько параметров -m, их значения объединяются как отдельные абзацы.

Итак, если вы ищете группировку нескольких сообщений фиксации, это должно выполнить эту работу.

git commit -m "commit message1" -m "commit message2"  
  • 0
    Агностический раствор (не зависящий от оболочки). Спасибо за это. Нам нужно RTFM :)
5

Вы можете использовать git commit -m "$(echo)" или git commit -m $'\n'

2

Если вы используете 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'
  • 1
    Так почему кто-то это опроверг? Это наиболее удобный способ работы с многострочными командами в bash, вам просто нужно настроить его один раз. Я использовал другие глупые предложения, показанные в других ответах здесь, но как только вы научитесь редактировать свои команды в вашем любимом текстовом редакторе, обратного пути просто не будет.
  • 1
    Это так душераздирающе полезно, я просто не могу поверить, что прожил мои прошлые годы без этого.
2

Лично мне легче всего модифицировать сообщения фиксации после факта в vi (или независимо от вашего выбора в редакторе git), а не в командной строке, выполнив git commit --amend сразу после git commit.

  • 4
    Вы можете достичь того же результата без необходимости вносить изменения, просто используя git commit -e .
  • 2
    Или просто git commit , и он откроет редактор с шаблоном сообщения фиксации.
0

Не нужно усложнять материал. После того, как -m "текст... следующая строка будет получена нажатием ENTER. Когда будет нажата клавишa > . Когда вы закончите, просто поставьте" и нажмите ENTER

$ git commit -m "Another way of demonstrating multicommit msg
>
> 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

Anothere way of demonstrating multicommit msg

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 ...

Надеюсь, что поможет

  • 0
    Этот ответ не получает достаточно любви!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню