git : 커밋 메시지의 인덱스 차이를 주석으로 표시


109

git commit열려있는 메시지 편집기 쇼 간단한 상태,이 같은 것입니다 :

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Your branch is ahead of 'origin/master' by 26 commits.
#
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   Showcase/src/com/gigantt/BorderArea.mxml
#   modified:   Showcase/src/com/gigantt/Client.mxml
#   modified:   Showcase/src/com/gigantt/GraphItem.mxml
#

커밋 할 diff도 표시하도록 git을 조정하려면 어떻게해야합니까? 나는 그것이 긴 차이 일 수 있다는 것을 알고 있지만 여전히 .. 매우 유용합니다.


커밋 메시지에 나열된 변경 사항이 필요하기 위해 무엇을하려고합니까? 특정 도구에 대한 오해가있을 수 있으며 실제 문제를 해결하는 데 도움을 드릴 수 있습니다.
Mark Rushakoff 2011 년

1
'git log -p'로 얻을 수없는 정보를 제공합니까?
Jed Schneider

12
@Mark : OP는 diff가 주석 처리되기를 원합니다. 주석 처리 된 기본 힌트의보다 자세한 버전입니다. @Jed : OP는 커밋 메시지 템플릿에서이 정보를 원합니다. 예, git diff --cached생성하지만 매번 원하는 경우 별도의 명령을 실행하는 이유는 무엇입니까?
Cascabel 2011 년

1
github.com/tpope/vim-fugitive/issues/149궁금한 점이 있으면 도망자를 위해 이것을 따르고 있습니다. 그렇지 않다면 그래야합니다.
lkraav

답변:


149

에 대한 --verbose(또는 -v) 플래그는 git commit커밋 될 항목의 차이를 표시합니다.

git commit --verbose


3
diff가 주석 처리되지 않은 것 같습니다. 기본적으로 주석으로 만들 수 있습니까?
Idan K

25
diff 메시지는 주석 처리 할 필요가 없습니다. Idan; git은 주석처럼 무시하는 것을 알고 있습니다.
Brandon Rhodes

@BrandonRhodes git bit ti diff를 무시하는 방법? diff 형식으로 몇 줄의 추가 줄을 생성하는 스크립트가 있지만 첫 줄에서 잘 렸습니다
Dennis C

2
@IdanK, 커밋 메시지 템플릿에서 주석 처리되지 않은 diff 행의 이점은 추가 된 diff 콘텐츠에 대해 vim 코드 색상 표시가 작동한다는 것입니다 (vim에 대해 git 파일 유형 추가가 설치된 경우). 이 diff 선이 주석 처리 된 경우이 색상은 작동하지 않습니다.
크리스토퍼

1
내 이전 의견을 무시하십시오. 범인은 EditorConflig 플러그인이 "위의 줄을 만지지 마십시오"줄을 엉망으로 만드는 것이 었습니다.
다니엘 Liuzzi

31

Alan의 답변에 대한 답변을 게시하기에 충분한 평판은 아니지만 Idan과 다른 사람을 위해 방금 시도했으며 커밋 메시지의 diff 줄이 명시 적으로 주석 처리되지 않았습니다. 그러나 그들은 여전히 ​​최종 커밋 메시지에 나타나지 않습니다. 감사합니다.

$ git commit --verbose

내 편집기에서 :

Feeling a bit pessimistic now.

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   README
#
diff --git a/README b/README
index af5626b..c62237e 100644
--- a/README
+++ b/README
@@ -1 +1 @@
-Hello, world!
+Goodbye, world!

( #앞에 diff 라인 이 없다는 점에 유의하십시오 )

그리고 실제 커밋 메시지 :

$ git log -n 1
commit ad21a2655ef6d8173c2df08dc9893055b26bc068
Author: Tom Jakubowski <tom@crystae.net>
Date:   Thu Oct 27 19:12:54 2011 -0700

    Feeling a bit pessimistic now.

분명히 git showdiff는 여전히 표시되지만 항상 커밋하기 때문입니다. :)


2
새 버전의 git (나는 2.3이 있음)에서 diff 앞에 다음 줄이 붙습니다 # ------------------------ >8 ------------------------.-나는 git이 그 뒤에 나오는 모든 것을 자동으로 제거한다고 가정합니다.
Jan Warchoł 2015 년

최소 2.4.1부터 다음과 같이 표시됩니다. # ------------------------> 8 ------------ ------------ # 위의 줄을 만지지 마십시오. # 아래의 모든 항목이 제거됩니다. 그래서 이것은 당신이 생각하고 있던 것을 확인합니다.
Anthony Panozzo

@AnthonyPanozzo 이것은 2.5.3에서 깨진 것 같습니다. "위의 줄을 만지지 마십시오"마커에도 불구하고 전체 diff는 어쨌든 커밋 메시지에서 끝납니다.
Daniel Liuzzi

2.8.2에서 나를 위해 작동
앤서니 Panozzo

3
명령 줄에서 설정하려면 :git config --global commit.verbose true
Taylor Edmiston

10

이 동작이 항상 존재 하는지 확인하는 가장 간단한 방법 은이 섹션을 git config파일 에 추가하는 것입니다 .

[commit]
  verbose = true

실제로 diff 모드로 표시하도록 편집기를 구성해야 할 수도 있습니다 (구문 강조 표시를 위해). Windows 메모장 대체품으로 Notepad2를 사용 -s diff하고 색 구성표를 적절하게 설정합니다 (삭제 된 줄에는 빨간색 등).

[core]
  editor = C:/Windows/system32/notepad.exe -s diff

9

.git / hooks / prepare-commit-msg 에 다음 줄을 넣어 주석 처리 된 diff를 얻었습니다.

#!/bin/bash

if [ "$2" == "" ] ; then
    git diff --staged -p --stat 2> /dev/null | awk '{ printf "#"; print}' >> "$1"  2>/dev/null
fi

이렇게하면 diff를 주석 처리 할 수있을뿐만 아니라 더 많은 정보를 추가 할 수도 있습니다 ( stat 옵션 처럼 ).

편집 : 또한 git commit --verbose 는 커밋 메시지에 대한 diff를 포함하지 않습니다.


4
댓글 대신 사용할 # ------------------------ >8 ------------------------수 있습니다. git-scm.com/docs/git-commit#git-commit-scissors
AB

8

커밋 할 때 항상 차이를보고 싶다면 다음을 ~/.gitconfig파일에 추가 할 수 있습니다 .

[alias]
commit = commit -v

그래도 할 수 있습니다-어떤 버전의 git을 사용하고 있습니까? 이것은 버전 2.0.0에서 나를 위해 작동합니다
rusty

2
귀하의 답변은 유망 해 보이지만 저에게도 효과가 없습니다. 나는 시도 git config --global alias.commit 'commit -v'했고 당신이 제안한 것처럼 별칭이 자동으로 추가되었습니다. cv예상대로 작동하는 다른 별칭을 만들었습니다 . 내 자식 버전은 Ubuntu 15.10에 패키지 된 2.5.0입니다.
Daniel Böhmer

6
명령 줄에서 설정하려면 :git config --global commit.verbose true
Taylor Edmiston
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.