해시 마크 (#)로 git commit 메시지를 시작하십시오.


283

Git은 #커밋 할 때 주석 줄로 시작하는 줄을 처리합니다 . 이것은 티켓 추적 시스템으로 작업 할 때 매우 성가 시며 줄의 시작 부분에 티켓 번호를 쓰려고합니다.

#123 salt hashed passwords

git은 커밋 메시지에서 단순히 라인을 제거합니다. 해시를 피할 수있는 방법이 있습니까? 나는 시도 \하고 !, 그러나 아무것도 작동하지 않습니다. 이전의 공백 #은 유지되므로 문제에 대한 해결책이 아닙니다.


8
간결한 가치가 있기 때문에 @AlexBudovski.
Xavi

8
git 1.8.2 (2013 년 2 월) git config core.commentchar부터 해당 주석 문자를 구성 할 수 있습니다. 아래 내 답변
VonC

3
Git v2.0.0 (2014.05.21) 이후 git commit --cleanup=scissors보다 유연합니다. 내 답변
Sungam

4
나는 GitHub 사람들이 이슈 번호를 해시로 표시하기로 결정할 때이 문제에 대해 생각하지 않았다는 것에 놀랐습니다!
Michael Scheper

1
@Michael 공정하게,이 컨벤션은 Mantis, Trac, Redmine 및 아마도 다른 사람들에 의해 이미 사용되었습니다. 나는 GitHub가 바퀴를 재발 명하는 대신 그것을 따르기로 결정했다고 가정합니다. stackoverflow.com/questions/40495/…
켈빈

답변:


235

이 동작은 git commit'기본'정리 '동작의 일부입니다 . 라인을 시작으로 유지 #하려면 대체 정리 모드를 사용할 수 있습니다.

예 :

git commit --cleanup=whitespace

이 작업을 수행 #하면 커밋에 표시하고 싶지 않은 모든 행 을 제거해야 합니다.


다음 질문은 다음과 같습니다. git이 #으로 시작하는 커밋 메시지 주석을 어디에서 편집 할 수 있습니까?
Alex

2
@Alex : commit.templategit 구성 변수에 의해 제어됩니다 .
CB Bailey

23
이것은 기존 커밋을 수정하는데도 효과적입니다. 예 :git commit --amend --cleanup=whitespace
James Andres

@CharlesBailey : git commit -t / dev / null을 사용하여 미리 정의 된 텍스트를 제거 할 것으로 예상했지만 여전히 표시됩니다
Alex

"# 123 Commit message"의 커밋 메시지와 Mac 용 GitHub 및 SourceTree와 같은 클라이언트의 주석을 가질 수 있기 때문에이 클라이언트가 무엇을하고있는 것 같습니까?
Phil Ostler

134

git1.8.2 (2013 년 2 월) 부터 #커밋 메시지의 주석 처리 된 행에 ' '와 다른 문자를 사용할 수 있습니다 .

그러면 #버그 번호 참조에 ' ' 를 사용할 수 있습니다 .

편집기에서 메시지를 편집하도록 사용자에게 요청할 때 Git이 제공하는 다양한 "힌트"라인은 #기본적 으로 ' '로 주석 처리됩니다 .

core.commentChar구성 변수는이 '를 사용자 정의하는 데 사용할 수있는 #다른 문자로'.


이론적으로, 당신은 할 수 를 넣어core.commentChar 단어 (여러 문자)를 있지만 git 2.0.x / 2.1이 더 엄격해질 것입니다 (2014 년 3 분기).

참조 50b54fd 커밋 에 의해 (응웬 타이 응옥 두이 pclouds) :

구성 : core.commentChar에 엄격해야합니다.

우리는 주석 문자열을 지원하지 않습니다 (적어도 아직은 아닙니다). 그리고 멀티 바이트 문자 인코딩도 잘못 해석 될 수 있습니다.

두 개의 쉼표가있는 테스트는이를 위반하므로 업데이트됩니다. eff80a9 (커스텀 "comment char" -2013-01-16)에 도입 core.commentChar 패치와 함께 추가되었습니다 . 그런 행동이 필요한지 분명하지 않습니다 .


git 2.0.x / 2.1 (Q3 2014)은 다음에 대한 자동 선택을 추가합니다 core.commentChar. 커밋 84c9dc2
참조

core.commentChar"이다 auto',"와 주석 문자의 시작# 기본에서와 같이'이지만 준비된 메시지에 이미있는 경우, 작은 부분 집합의 다른 문자를 찾을 수 있습니다. 자식이 예기치 않게 일부 줄을 제거하기 때문에 놀라움을 멈추어야합니다.

git은 #사용자 정의 템플릿에서 ' '를 주석 문자로 인식 하고 최종 주석 문자가 다른 경우 변환하기에 충분히 똑똑하지 않습니다 .
커밋 메시지의 일부로 사용자 정의 템플릿의 '#'행을 생각합니다. 따라서이 템플릿을 사용자 정의 템플릿과 함께 사용하지 마십시오.

"auto"후보 문자 목록은 다음과 같습니다.

# ; @ ! $ % ^ & | :

이는 커밋 메시지에 ' '가 사용 되었기 때문에 이와 같은 명령 git commit -m '#1 fixed issue'이 commentChar를 ' ;'로 자동 전환 한다는 것을 의미 #합니다.


1
이 후 구문 HL을 수정하려면 다음 관련 질문을 참조하십시오. stackoverflow.com/questions/16164624/…
Alois Mahdal

@ Guten 사실, 나는 그것을 반영하기 위해 대답을 바 꾸었습니다.
VonC

1
@newbyca 어떤 버전의 git에서 대화식 rebase 중에 지원되지 않는 것으로 보입니까?
VonC

2
따라서이를 설정하기 위해 다음과 같이 할 수 있습니다.$ git config --global core.commentchar ';'
davetapley

6
나는이 대답을 좋아한다. 새로운 제안 솔루션 Oneliner :git config --global core.commentChar auto
aross

81

여기에 대한 답변은 훌륭하고 자세하지만 나 같은 git noob의 경우 git config 옵션을 사용자 정의하는 것은 분명하지 않습니다. 다음은 주석 문자 에서 #로 변경하는 예입니다 ;.

git config core.commentChar ";"

그게 당신이해야 할 전부입니다.


3
이것은 또한 커밋 메시지 git commit를 편집하기 위해 구성된 편집기를 열 때 git이 커밋 메시지에 추가하는 기본 주석이 달린 텍스트를 변경합니다 !
Michael Trouw

1
일회성 수정의 경우 다음을 사용하십시오 git -c core.commentChar="|" commit --amend( |원하는 것으로 바꾸십시오 ).
Droogans

62

명령 행 옵션을 사용할 수 있습니다 -m.

git commit -m "#123 fixed"

35
그러나 이것은 끔찍한 커밋 메시지입니다. 버그가 무엇이고 어떻게 수정되었는지 포함시켜야합니다
Good Person

3
커밋 메시지는 버그가있는 한 괜찮습니다
Trident D' Gao

6
버그 추적 시스템이 갑자기 손상되어 백업이 없다면 아닙니다! :)
caveman_dick

38

대화식 리베이스를 수행하는 경우 커밋 메시지를 아무것도 저장하지 않으면 ( #처음에는 주석을 작성했기 때문에 무시되었으므로) git은 수행 할 작업을 보여줍니다.

Aborting commit due to empty commit message.
Could not amend commit after successfully picking 5e9159d9ce3a5c3c87a4fb7932fda4e53c7891db... 123 salt hashed passwords
This is most likely due to an empty commit message, or the pre-commit hook
failed. If the pre-commit hook failed, you may need to resolve the issue before
you are able to reword the commit.
You can amend the commit now, with

        git commit --amend

Once you are satisfied with your changes, run

        git rebase --continue

따라서 메시지를 수정하십시오.

git commit --amend -m "#123 salt hashed passwords"

리베이스를 계속하십시오 :

git rebase --continue

이것은 커밋을 이미 푸시했지만 메시지를 변경하고 싶은 사람에게는 맞습니다.
Hoang Trinh

편집기를 사용하여 메시지를 입력하고 처음에 해시가있는 경우 새 커밋에도 적용됩니다.
Owain Williams

29

git commit --cleanup=scissors사용되어야한다. 2014.05.21 에 Git v2.0.0 에 추가되었습니다.

...에서 git commit --help

--cleanup=<mode>
  scissors
    Same as whitespace, except that everything from (and including) the line
    "# ------------------------ >8 ------------------------" is truncated if the message
    is to be edited. "#" can be customized with core.commentChar.

@CharlesBailey가 이미 제안한 것처럼 수동으로 주석을 사용 commit.cleanup = whitespace하고 제거하는 것보다 이것이 더 나은 방법을 이해하지 못합니다 # …. scissors사용하여 위 구문을 정리 단지 부가 - 모드 git format-patch/ mailinfo/ am; 메시지를 커밋하기 위해 주석을 추가 할 때 구문을 사용 하지 않습니다…-- >8 --… .
Slipp D. Thompson

1. " # ...하드웨어 해설을 제거 할 필요가 없기 때문에 더 낫다고 생각합니다 . 2. 의견의 두 번째 부분에 대해 잘 모르겠습니다. scissors모드는 확실히입니다 git commit --help. 어떤 버전 git을 사용하고 있습니까? @ SlippD.Thompson
Sungam

응? whitespace모드는 1. 선행 및 후행 빈 줄, 2. 후행 공백, 3. 연속적인 빈 줄 축소를 제공합니다. scissors1. 선행 및 후행 빈 줄, 2. 후행 공백, 3. 연속 된 빈 줄 축소, 4. 선에서 (및 포함) 모든 것을 제거합니다 # -…- >8 -…-. 그러나 가위 선 ( # -…- >8 -…-)은 git-format-patch/ mailinfo/를 사용할 때만 삽입됩니다 am. 따라서 일반적인 git-commit/ merge/ rebase/ cherry-pick워크 플로의 경우 scissors스트리핑 모드는 whitespace모드 보다 이점이 없습니다 . v2.11.0
Slipp D. Thompson

@ SlippD.Thompson 어떤 버전의 자식을 사용하고 있습니까? 나는 2.8.3를 사용하고 있는데 git commit --cleanup=scissors 않습니다가 앞에 추가 # ------------------------ >8 ------------------------전과 라인 git status정보를. `# ------------------------> 8 ------------------- ----- # 위의 선을 만지지 마십시오. # 아래의 모든 것이 제거됩니다. 초기 지점 마스터 # 번호에 #이 변경이 커밋 할 # # 커밋 : # 새 파일을 : .gitignore를`
Sungam

1
나는 이것의 바닥에 도착했다고 생각합니다. 힘내 실제로 삽입 않습니다 # ------------------------ >8 ------------------------사용할 때 _ "... 당신이 할 수처럼 보이는"상태 TXT 전에 scissors; 그러나, 가위 선 삽입 # Conflicts: … 텍스트를. 에 commit.status = false설정 .gitconfig했으므로 상태 텍스트가 표시되지 않고 충돌 텍스트 만 표시되었습니다. 나는 정정 받았다. 공감으로 변경.
Slipp D. Thompson

3

티켓 번호에 다른 접두사를 사용하십시오. 또는 "버그 # 42"와 같이 티켓 번호 앞에 단어를 추가하십시오. 또는 단일 공백 ​​문자를 줄 앞에 추가하십시오. 해당 공백을 제거하려면 커밋 후크를 추가하십시오.

나는 개인적으로 후크에 의해 수행되는 이러한 종류의 커밋 메시지 조작을 원하지 않을 것이다. 왜냐하면 원하지 않을 때 트리거 될 때 매우 자극적 일 수 있기 때문이다. 가장 쉬운 해결책은 아마도 문제를 다시 생각하는 것입니다.


1
다른 표현은 문제에 대한 해결 방법 일뿐입니다. 프로젝트 지침에 커밋 메시지가 티켓 ID로 시작해야한다고 명시되어 있으면 작동하지 않습니다. 그리고 커밋 후 훅은 매우 추악합니다. 나는이 "버그"를 git 개발자들에게보고해야한다고 생각한다
knittl

귀찮게하지 마십시오. 잘못되었습니다. git 개발자에게 지침에 따라 작업하도록 요청하지 마십시오. 해시 문자로 시작하는 변수 이름 규칙을 지원하도록 Dennis Ritchie에게 C 언어를 변경하도록 요청하지 않습니까? 여기에도 동일하게 적용됩니다. 커밋 메시지가 주석을 허용하면 diff를 추가하고 주석 처리 한 커밋 편집기를 여는 것과 같은 흥미로운 것들에 대한 지원이 추가되므로 정확한 변경 사항을 기억할 필요가 없습니다. 선행 공백 문자를 유지하는 데 어떤 문제가 있습니까?
wilhelmtell

1
git의 커밋 메시지에서 이스케이프 문자를 지원하는 것은 그리 중요하지 않습니다
knittl

5
완벽하게 합리적인 기능 요청입니다. 특히 AFAICT Trac은 커밋 메시지가 해시로 시작하여 슬립 번호로 시작하지 않으면 버그 슬립에 커밋을 연결하지 않는다는 사실에 비추어 볼 때. 따라서 이는 단지 누군가의 표준이 아니라 도구의 필수 구문입니다. Git 개발자가 가치가 있는지 여부를 결정하게하십시오. (그리고 예, Trac 문제를 해결할 수 있습니다 . Git도 할 수있는 것을 요청하는 데 아무런 문제가 없습니다.)
Luke Maurer

"특히 커밋 메시지가 슬립 번호로 시작하지 않고 해시로 시작하는 경우 Trac, AFAICT가 커밋을 버그 슬립에 연결하지 않는다는 사실에 비추어" — Trac에 대한 제한된 경험 #xxx에서 커밋 메시지의 어느 곳에서나 발생하는 것과 같은 문제가 문제와 연결됩니다. 커밋이 시작될 필요는 없습니다. 어쩌면 이것은 지난 5 년 동안 바뀌었던 것입니까?
Guildenstern

1

내 커밋은 모두 시작 #issueNumber하므로이 상용구를 내 vim .git/hooks/commit-msg:

NAME=$(git branch | grep '*' | sed 's/* //') 
echo "$NAME"' '$(cat "$1") > "$1"

이제 분기 #15가 있고 커밋 메시지를 작성 한다고 가정 해 봅시다 add new awesome feature. 이 방법을 사용하면 최종 커밋 메시지가됩니다 #15 add new awesome feature.

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