명령 줄에서 'git commit -m'에 줄 바꿈 추가


746

커맨드 라인에서 Git을 사용 git commit -m ""하고 Vim으로 가지 않고 커밋 메시지 (을 사용하여 )에 줄 바꿈을 추가하려고합니다 .

이것이 가능한가?


6
참고로, 여기에 좋은 커밋 메시지 규칙을 요약 한 링크가 있습니다 -github.com/erlang/otp/wiki/Writing-good-commit-messages 누군가에게 도움이된다면.
WeirdElfB0y

5
같은 GIT_EDITOR="emacs" git commit -m 'paragraph1' -m 'paragraph2' -e것이 당신이 피하는 데 도움이 될 것 vim입니다.
jotik

답변:


693

확실히, 그것이 어떻게 이루어지는지는 쉘에 달려 있습니다. Bash에서는 메시지 주위에 작은 따옴표를 사용하고 따옴표를 열어두면 따옴표를 닫을 때까지 Bash에서 다른 줄을 묻습니다. 이처럼 :

git commit -m 'Message

goes
here'

또는 "here document"(heredoc라고도 함)를 사용할 수 있습니다.

git commit -F- <<EOF
Message

goes
here
EOF

53
@Peter Farmer의 답변은 나중에 Git 규칙이 분명히 다음과 같습니다 : 요약을위한 1 줄, 2 줄 바꿈, 자세한 메시지.
Nick Spacek

4
또한 @esse의 아래 게시물을 참조하십시오. 간단한 캐리지 리턴이 트릭을 수행합니다.
Hakan Ensari

6
@MohamadAli는 Windows의 명령 행 구문 분석 작동 다르게
사이먼 리히터에게

2
@KelvinShadewing, 예. 그러나 쉘 대체 규칙이 메시지에 적용되는 차이점이 있으므로 달러 기호 및 기타 메타 문자를 이스케이프해야합니다. 반면에 변수를 사용할 수 있습니다.
Simon Richter

2
@ Nikhil, 많은 프로그램은 stdin 또는 stdout을 의미하는 단일 대시를 파일 이름으로 지원합니다. 으로 여기에 문서git명령은 표준 입력에서 메시지의 텍스트를 읽을 수 있으며, -F옵션에서 메시지를 읽을 수있는 파일 이름을 제공합니다.
Simon Richter

514

헤드 라인과 콘텐츠 라인을 원한다면 다음을 사용할 수 있습니다.

git commit -m "My head line" -m "My content line."

이렇게하면 줄이 아닌 별도의 단락이 만들어집니다. 따라서 두 줄 사이에 빈 줄이 있습니다. -m예 :

My head line

My content line.

80
이것은 다른 곳에서 언급 된 인용 트릭이 작동하지 않는 Windows에서 작업하는 이점이 있습니다. -m각 줄마다 분리하십시오 . 좋은!
ddotsenko

8
이 방법을 사용하여 생성 된 메시지는 GitHub, Windows 용 GitHub 및 TortoiseGit에서 올바르게 표시됩니다.
Richard

11
@ddotsenko 이것은 Linux / Mac에서 작업 할 때 얻을 수있는 이점입니다. 여기서 쉘은 괜찮습니다 =)
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

7
From man git commit: -m <msg>, --message = <msg> 주어진 <msg>를 커밋 메시지로 사용하십시오. 여러 개의 -m 옵션이 제공되면 해당 값은 별도의 단락으로 연결됩니다.
Amedee Van Gasse

55
이렇게하면 줄이 아닌 별도의 단락 이 만들어집니다 . 따라서 두 줄 사이에 빈 줄이 있습니다 -m.
Ohad Schneider

398

Bash와 함께 명령 행에서 Git을 사용하면 다음을 수행 할 수 있습니다.

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

Enter새 줄을 원할 때 간단히 입력하고 누르 십시오. ">"기호는을 눌렀 음을 나타내며 Enter새 줄이 있습니다. 다른 답변도 효과가 있습니다.


6
Abizern의 대답 은 이것이 왜 작동하는지 나에게 분명히 해주었 습니다. Bash 쉘은 첫 번째 큰 따옴표 문자가 '닫힐'(뒤에 큰 따옴표 문자 포함) 될 때까지 <kbd> Enter </ kbd> 키 누름을 새로운 행으로 해석합니다.
Kenny Evitt

1
이것이 이것이 훨씬 더 효과적이고 쉽고 실용적인 해결책이라는 데 동의해야합니다. Git 1.8.2.1을 사용하면 잘 작동합니다. 나에게서 +1
crmpicco

이것은 Enter 키 의 특수 기능이 아니라 따옴표와 관련이 있습니다. 변수 확장 및 특수 문자 이스케이프를 제외하고 큰 따옴표 또는 작은 따옴표를 사용하는 것은 실제로 중요하지 않습니다. 따라서 대답에서 작은 따옴표를 선택했습니다.
Simon Richter

2
zsh에서는 이것을 사용하지 마십시오! 터미널이 닫히고 입력 한 내용을 잃게됩니다.
laike9m

3
Windows 용 Gitbash에서 작동합니다.
Omar Tariq 2016

111

사용할 수 있어야합니다

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

로부터 배쉬 설명서 :

$ ' string ' 형식의 단어는 특별히 취급됩니다. ANSI C 표준에 지정된대로 백 슬래시 이스케이프 문자를 바꾸어 단어를 string으로 확장합니다 .

여기에는 위에 표시된대로 줄 바꿈과 16 진 및 유니 코드 코드 및 기타 지원이 포함됩니다. 백 슬래시 이스케이프 문자 목록을 보려면 링크 된 섹션으로 이동하십시오.


@rsy : 어떤 버전의 Bash를 사용하고 있습니까? 당신이 할 때 무엇을 볼 수 echo $'one\ntwo'있습니까?
추후 공지가있을 때까지 일시 중지되었습니다.

1
rsy $ bash --version GNU bash, 버전 3.2.53 (1)-릴리스 (x86_64-apple-darwin13) Copyright (C) 2007 Free Software Foundation, Inc.이 명령의 출력은 예상대로 두 가지 다른 방식으로 표시됩니다. 윤곽!
ccoutinho 2016 년

Windows 7에서 나를 위해 최선의 선택 감사합니다
Mohamad Ali

2
$가 여기에 핵심이며 처음에는 그것을 알지 못했습니다. 그렇지 않으면 메시지 중간에 \ n이 표시됩니다.
ChrisBob

1
전체 문자열에 $ '...'를 사용할 필요조차 없습니다. 개행 문자 주위에서 이것을 사용하면 작동 git commit -m "first line"$'\n'"second line"합니다. 시작하기 전에 이전 문자열을 닫아야합니다 $'string'.
PlasmaBinturong

95

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의 여러 줄 Git 커밋 메시지

스크린 샷은 Poshgit과 함께 PowerShell을 사용하여 설정 한 예에서 가져온 것입니다.


7
멋진 답변입니다. 나는 이것을 오랫동안 둘러 보았고 Git 커밋 메시지를 형식화하는 다양한 방법을 시도했지만 이것이 가장 효과적입니다. Git 1.8.2.1 프롬프트에서 작동하는지 확인할 수 있습니다.
crmpicco

1
Powershell에서는 줄 바꿈을 위해`n을 수행 할 수 있습니다
Ecropolis

2
Windows 용 Git Bash 에서 크게 효과가 있었습니다.
율리시스 알베스

1
이것은 가장 호환 가능한 방법이므로 선택한 답변 이어야 합니다. 다른 제안과 마찬가지로 특정 CLI 프롬프트에 의존하지 않습니다.

1
이것은 더 나은 답변이며 답변으로 선택해야합니다. 이것은 기본 동작으로 작동 할뿐만 아니라 훨씬 더 확실한 커밋 메시지를 제공 할뿐만 아니라 -m을 사용하면 다소 유연합니다. 또한 특정 창처럼 보이고 창 관련 주석을 끌어 들였지만 Linux에서도 잘 작동합니다.
0xc0de 8

44

같은 일을

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"

8
+1이 경로를 내려다 보는 것은 일반적인 관습이었습니다. 감사합니다
Alan Whitelaw

39

에서 힘내 문서 :

-m <msg>
--message = <msg>
주어진 <msg>를 커밋 메시지로 사용하십시오. 여러 -m옵션이 제공되면 해당 값은 별도의 단락으로 연결됩니다.

따라서 여러 커밋 메시지를 그룹화하려면이 작업을 수행해야합니다.

git commit -m "commit message1" -m "commit message2"

불가지론 적 솔루션 (쉘 독립적). 고마워 RTFM :)
Mat M

38

나는 이것이 게시 된 질문에서 너무 멀리 떨어져 있지는 않지만 기본 편집기를 설정 한 다음

git commit -e

훨씬 더 편안 할 것입니다.


2
이것은 최고의 답변이되어야합니다.
hxpax

5
당신은 떠날 수 있고 -e여전히 편집기를 열 것입니다
djangonaut

이것은 내가 찾고있는 대답이었습니다.
Tinmarino

28

물건을 복잡하게 할 필요가 없습니다. 애프터 -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 ...

1
이 답변은 충분한 사랑을 얻지 못했습니다!
cBlaine

1
이것은 훌륭한 답변입니다. Github에서 새로운 줄이 올바르게 표시됩니다. 첫 줄은 제목으로 표시됩니다.
Yogesh Umesh Vaity 2016 년

18

Mac에서 zsh를 사용하고 큰 따옴표 ( ") 안에 여러 줄 커밋 메시지를 게시 할 수 있습니다. 기본적으로 새 줄을 입력하고 Enter 키를 누르면 계속 따옴표를 닫고 돌아올 때까지 메시지가 Git으로 전송되지 않습니다. .


7
bash에서도 동일한 작업을 수행 할 수 있습니다.
피터 파머

17

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 을 참조하십시오.


5

개인적으로, 나는 vi커맨드 라인이 아닌 (또는 선택한 git editor가 무엇이든) 실제로 커밋 메시지를 수정하는 것이 가장 쉽다는 것을 알게 git commit --amend되었습니다 git commit.


6
를 사용하여 수정하지 않고도 동일한 결과를 얻을 수 있습니다 git commit -e.
Nathan Hinchey

4
또는 간단히 git commit, 커밋 메시지 템플릿으로 편집기를 엽니 다.
Jim Stewart

5

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에서 여러 줄 명령으로 작업하는 가장 편리한 방법이므로 한 번만 구성하면됩니다. 나는 다른 답변에 표시된 다른 어리석은 제안을 사용하고 있지만 일단 좋아하는 텍스트 편집기에서 명령을 편집하는 법을 배우면 돌아갈 길이 없습니다.
Aleks-Daniel Jakimenko-A.

1
이것은 내가 그렇게하지 않고 지난 몇 년을 살았다는 것을 믿을 수없는 아주 가슴 아프다.
SodeDead

2

다음은 표준 cmd.exe 셸을 사용하여 Windows 에서 실패한 솔루션 목록입니다 (일시적인 시행 착오 시간을 절약하기 위해).

  • 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으로 아마도 최선의 선택 일 것입니다.


"쉘"창 제공에 슬프고 슬픈 변명을 사용하지 마십시오.
jthill

2

슬프게도, git은 메시지에 줄 바꿈 문자를 허용하지 않는 것 같습니다. 이미 다양한 합리적인 해결책이 있지만 스크립팅 할 때 귀찮습니다. 여기 문서도 작동하지만 다루기가 너무 성 가실 수도 있습니다 (yaml 파일 생각)

여기 내가 한 일이 있습니다.

git commit \
    --message "Subject" \
    --message "First line$(echo)Second line$(echo)Third Line"

이것은 여전히 ​​추악하지만 여전히 유용 할 수있는 '한 줄짜리'를 허용합니다. 일반적으로 문자열은 변수이거나 변수와 결합되므로 uglynes는 최소로 유지 될 수 있습니다.


1

나는 당신 이 메시지를 제공하지 않으면 여러 줄을 쓸 수있는 곳에서 적어도 리눅스에서 당신을 위해 나노를 열 것이라고 언급하는 사람을 보지 못했습니다 ...

이것 만이 필요했습니다 :

git commit
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.