저자와 날짜를 포함하는 git log에서 가능한 가장 짧은 출력


465

이 정보가있는 git log 출력을 어떻게 표시 할 수 있습니까?

* author
* commit date
* change

로그 항목 당 한 줄로 압축하고 싶습니다. 가장 짧은 형식은 무엇입니까?

(시도 --format=oneline했지만 날짜가 표시되지 않음)


2
어쩌면 당신은 내 색깔의 버전을 좋아할 것이다 : stackoverflow.com/a/49534733/2292766
Hannes Schneidermayer

답변:


699

git log --pretty=format:"%h%x09%an%x09%ad%x09%s"

일을했다. 출력 :

  fbc3503 mads    Thu Dec 4 07:43:27 2008 +0000   show mobile if phone is null...   
  ec36490 jesper  Wed Nov 26 05:41:37 2008 +0000  Cleanup after [942]: Using timezon
  ae62afd tobias  Tue Nov 25 21:42:55 2008 +0000  Fixed #67 by adding time zone supp
  164be7e mads    Tue Nov 25 19:56:43 2008 +0000  fixed tests, and a 'unending appoi
  93f1526 jesper  Tue Nov 25 09:45:56 2008 +0000  adding time.ZONE.now as time zone 
  2f0f8c1 tobias  Tue Nov 25 03:07:02 2008 +0000  Timezone configured in environment
  a33c1dc jesper  Tue Nov 25 01:26:18 2008 +0000  updated to most recent will_pagina

stackoverflow question : "svn ls -v와 같은 git log output"에서 영감을 얻은 결과 필요한 매개 변수를 추가 할 수 있음을 알았습니다.

날짜를 줄이려면 (시간을 표시하지 않음) --date=short

다른 옵션이 무엇인지 궁금한 경우 :
%h= 약식 커밋 해시
%x09= 탭 (코드 9의 문자)
%an= 작성자 이름
%ad= 작성자 날짜 (형식은 --date = 옵션에 따름)
%s= subject
From kernel.org/pub/software/scm Vivek의 의견에 따라 /git/docs/git-log.html(PRETTY FORMATS 섹션)


6
... 그리고 date=short또 다른 답변에서 cdunn2001이 제안한 것처럼 추가하는 것이 유용합니다
Jesper Rønn-Jensen

10
내가 가장 좋아하는 (짧은) oneliner는 이제 저자보다 먼저 날짜를 git log --pretty=format:"%h %ad%x09%an%x09%s" --date=short
바꾸고

143
색깔로 양념을 만들고 심판을 보여 git log --pretty=format:'%C(yellow)%h %Cred%ad %Cblue%an%Cgreen%d %Creset%s' --date=short
주십시오

16
고정 너비 열 표 :alias glop="git log --pretty=format:'%C(yellow)%h|%Cred%ad|%Cblue%an|%Cgreen%d %Creset%s' --date=short | column -ts'|' | less -r"
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

15
% h = 약식 커밋 해시, % x09 = 탭 (코드 9의 문자), % an = 작성자 이름, % ad = 작성자 날짜 (형식은 --date = 옵션), % s = 주제. 에서 kernel.org/pub/software/scm/git/docs/git-log.html (PRETTY 섹션 형식)
비벡

204

이 두 가지 .gitconfig 설정을 사용합니다.

[log]
  date = relative
[format]
  pretty = format:%h %Cblue%ad%Creset %ae %Cgreen%s%Creset

% ad는 작성자 날짜이며 --date.gitconfig의 [log] 스탠자에 지정된 옵션 으로 대체 될 수 있습니다 . 나는 물건이 언제 커밋되었는지 즉각적인 느낌을주기 때문에 상대 날짜를 좋아합니다. 출력은 다음과 같습니다.

6c3e1a2 2 hours ago you@me.com lsof is a dependency now.
0754f18 11 hours ago you@me.com Properly unmount, so detaching works.
336a3ac 13 hours ago you@me.com Show ami registration command if auto register fails
be2ad45 17 hours ago you@me.com Fixes #6. Sao Paolo region is included as well.
5aed68e 17 hours ago you@me.com Shorten while loops

이것은 모두 컬러로되어 있으므로 로그 라인의 다양한 부분을 쉽게 구별 할 수 있습니다. 또한 git log[format] 섹션으로 인해 입력시 기본값 입니다.

2014 업데이트 : git은 이제 패딩을 지원하므로 위 버전을 멋지게 수정했습니다.

pretty = format:%C(yellow)%h %Cblue%>(12)%ad %Cgreen%<(7)%aN%Cred%d %Creset%s

이 오른쪽은 상대 날짜를 정렬하고 왼쪽은 커미터 이름을 정렬하므로 눈에 쉬운 열과 같은 모양을 얻을 수 있습니다.

스크린 샷

  ss # 1

2016 업데이트 : GPG 커밋 서명이 문제가되고 있기 때문에 서명 확인이 포함 된 버전 으로이 게시물을 업데이트 할 것이라고 생각했습니다 (스크린 샷에서는 커밋 직후 마젠타 문자입니다). 플래그에 대한 간단한 설명 :

% G ?: 올바른 (유효한) 서명의 경우 "G", 잘못된 서명의 경우 "B", 유효하지 않은 올바른 서명의 경우 "U", 서명이없는 경우 "N"표시

다른 변경 사항은 다음과 같습니다.

  • 출력이 tty 이외의 것이면 색상이 제거됩니다 (그립 등에 유용합니다)
  • git log -g 이제 reflog 선택기가 포함됩니다.
  • refnames에 2 개의 구획을 저장하고 끝에 배치합니다 (열 정렬을 유지하기 위해)
  • 그들은 너무 긴 경우 (예 : 상대 날짜를 잘라 내기 3 years, 4..)
  • 커미터 이름을 자르십시오 (일부 ppl의 경우 약간 짧을 수 있습니다. 커밋 이름을 줄이려면 git .mailmap 기능 을 변경 %<(7,trunc)하거나 확인하십시오 )

구성은 다음과 같습니다.

pretty = format:%C(auto,yellow)%h%C(auto,magenta)% G? %C(auto,blue)%>(12,trunc)%ad %C(auto,green)%<(7,trunc)%aN%C(auto,reset)%s%C(auto,red)% gD% D

모든 열 정렬에서 모든 (희망스럽게도) 쓸모없는 문자를 희생하여 훨씬 더 잘 보존됩니다. 개선 사항이 있으면 자유롭게 편집하십시오. 커밋이 서명되었는지 여부에 따라 메시지 색상을 결정하고 싶지만 가능하지는 않습니다.

스크린 샷

자식 로그의 스크린 샷


3
mailmap 을 사용하여 줄을 더 짧게 만들 수 있습니다 . 나는 직장에서 동료의 이름을 그들의 이름으로 만
줄여서

2
--pretty 형식의 대답은 좋고, tig대답은 필요한 구성없이 대화 형 작업을 제공하지만, 이것은 훌륭합니다. 표준 'git log'명령을 사용하여 요청 된 한 줄 출력 (색상으로 부팅!)을 제공합니다. 아주 좋아요
브렌트 파우스트

--right-left를 사용할 때 > <더 이상 마크가 표시되지 않습니다. %m형식에 추가 를 시도 했지만 >매번, 심지어 일반에도 나타납니다 git log. 마크가 표시되는 방식에 대한 단서가 있습니까?
Vituel

1
@AlvaroCavalcanti 문제 없습니다! gist.github.com/andsens/3ba598d829e948e1bf816e2c4cd5f282
andsens

2
@ TrầnViệtHoàng은의 --oneline별칭입니다 --pretty=oneline. format.pretty기본 pretty 형식이지만 format.onelineafaik 을 재정의 할 방법이 없습니다 . 내가 할 일은 pretty = shortlog설정 에서 줄을 생략 한 다음 실행 별칭을 만드는 것 git log --pretty=shortlog입니다.
andsens

99
git log --pretty=format:"%H %an %ad"

--date=날짜 형식을 설정하는 데 사용

git log --pretty=format:"%H %an %ad" --date=short

1
큰! 해시 그냥 말도 :) 내 인간의 눈처럼 다음에 나는 아마 단지 %의 H % 이상의 시간을 사용합니다
예스퍼 Rønn - 젠슨

당신이 원하는대로. 난 간단한 예제를 제공;)
knittl

2
멋있는! 나는 --date = short를
몰랐다

3
이것을 버리기 (8 년 늦음) : 해시는 넌센스처럼 보일 수 있지만 커밋을 체리 픽 또는 비교하려는 경우 유용한 도구입니다. 해시는 그것이 의미가있는 것이 아니라 그것을 사용
stevendesu

81

이것을 사용하십시오 :

git log --pretty="%C(Yellow)%h  %C(reset)%ad (%C(Green)%cr%C(reset))%x09 %C(Cyan)%an: %C(reset)%s" -7

-7마지막 7 개 항목 만 표시하려면 끝에 유의하십시오 .

보기:

여기에 이미지 설명을 입력하십시오


3
--date=short더 짧게 만들 수 있습니다.
xuhdev

@Hannes, 지점 이름은 어디에 있습니까?
Pacerier

@Pacerier는 git log항상 현재 체크 아웃 한 지점의 기록을 보여줍니다.
Hannes Schneidermayer

%d처럼 "ref names"를 복원하려면 추가하십시오 (HEAD -> master).
2540625

reset대신에 사용 auto합니까?
2540625

49

tig 는 주요 오픈 소스 * nix 배포판에서 사용 가능한 git log 명령 을 사용하는 대신 사용할 수 있습니다.

데비안이나 우분투를 설치하고 다음과 같이 실행 해보십시오 :

$ sudo apt-get install tig

(tig가 설치됨)

$ tig

(아래에 현재 커밋의 해시가 표시된 상태에서 로그가 다음과 같이 호출기에 표시됨)

2010-03-17 01:07 ndesigner      changes to sponsors list
2010-03-17 00:19 rcoder         Raise 404 when an invalid year is specified.
2010-03-17 00:06 rcoder         Sponsors page now shows sponsors' level.
-------------------------- skip some lines ---------------------------------
[main] 531f35e925f53adeb2146dcfc9c6a6ef24e93619 - commit 1 of 32 (100%)

마크 다운은 텍스트 색상을 지원하지 않으므로 다음과 같이 상상하십시오. 열 1 : 파랑; 열 2 : 녹색; 열 3 : 기본 텍스트 색상. 마지막 줄이 강조 표시되었습니다. 히트 Q 또는 Q를 종료합니다.


tig비정형 모서리가없는 정당화합니다 . ASCII 탭 (% x09)이 보장하지 않습니다.

A에 대한 간단한 날짜 형식 히트 자본 D (참고 : 소문자 d를 은 diff보기를 엽니 다.) 구성이 영구적으로 추가 show-date = short로 ~ / .tigrc; 또는 [tig].git / configure 또는 ~ / .gitconfig 의 섹션에 있습니다.

전체 변경 사항 을 보려면 다음을 수행하십시오 .

  • Enter 키를 누르 십시오 . 창의 아래쪽 절반에 하위 창이 열립니다.
  • k , j 키를 사용 하여 하위 분할 창에서 변경 사항을 스크롤하십시오.
  • 동시에 up , down 키를 사용하여 커밋에서 커밋으로 이동하십시오.

tig는 git과 별개이며 * nix에 따라 다르므로 cygwin을 Windows에 설치해야합니다. 그러나 대한 페도라 내가 설치 명령을 믿고 $ su, (enter root password), # yum install tig. 들어 FreeBSD의 시도 % su, (enter root password), # pkg_add -r tig.


그건 그렇고, tig는 로그의 빠른보기보다 훨씬 좋습니다 : Screenshots & Manual


전체 예를 제공하십시오. tig콘솔에 글 을 -bash: tig: command not found
쓰면

10
와. 이 도구는 환상적이고 놀라 울 정도로 빠릅니다! brew install tig
bullfight

mac을 사용하는 경우 brew install tig
Pedro Brasileiro

1
Windows에서 babun 사용자는 다음을 수행 할 수 있습니다.pact install tig
obojdi

34
git log --pretty=format:'%h %ad %s (%an)' --date=short  

또는

git log --pretty=format:'%h %ad %s | %an' --date=short  

... 위의 cdunn2001의 답변에 대한 보증 : 나는 Jesper와 knittl에 따라 저자의 전자 메일을 잃고 저자의 이름 만 포함하지만 읽기 쉬운 편의를 위해 일정한 너비의 열로 출력을 유지한다는 cdunn2001의 아이디어를 유지합니다 ( 좋은 생각이야!). 그러나 저자 이름에 대해 별도의 왼쪽 정렬 된 열 대신 명령 끝에 괄호로 해당 플래그를 감싸거나 파이프로 오프셋합니다. (실제로 출력을 읽을 때 시각적 보조 역할을하는 모든 문자 일 수 있습니다 ... 출력이나 디렉토리와 혼동되는 것을 줄이기 위해 슬래시를 앞뒤로 피하는 것이 좋습니다.

샘플 출력 :

6fdd155 2015-08-10 Fixes casting error in doSave | John Doe
c4f4032 2015-08-10 Fix for IE save. Add help button. | Jane
29a24a6 2015-08-10 Fixes bug in Course | Mac

31

사전 정의 된 git 별명을 사용하십시오.

$ git work

명령으로 한 번 작성 :

$ git config --global alias.work 'log --pretty=format:"%h%x09%an%x09%ad%x09%s"'

https://git-scm.com/book/tr/v2/Git-Basics-Git-Aliases

또는 더 많은 그래프로 채색 :

$ git config --global alias.work 'log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all'

여기에 이미지 설명을 입력하십시오


네, 이거 좋아요!
Alex

8
git log --pretty=format:'%h %ad  %s%x09%ae' --date=short

결과:

e17bae5 2011-09-30  Integrate from development -> main      nixon@whitehouse.gov
eaead2c 2011-09-30  More stuff that is not worth mentioning bgates@apple.com
eb6a336 2011-09-22  Merge branch 'freebase' into development        jobs@nirvana.org

일정한 너비의 물건이 먼저입니다. 가장 중요한 부분 인 전자 메일 도메인은 마지막이며 필터링하기 쉽습니다.


4

내가 할 준비가 된 커밋을 보여주기 위해

git log remotes/trunk~4..HEAD --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" --date=short | awk -F'\t' '{gsub(/[, ]/,"",$2);gsub(/HEAD/, "\033[1;36mH\033[00m",$2);gsub(/master/, "\033[1;32mm\033[00m",$2);gsub(/trunk/, "\033[1;31mt\033[00m",$2);print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}' | less -eiFRXS

결과는 다음과 같습니다.

ef87da7 2013-01-17 haslers      (Hm)Fix NPE in Frobble
8f6d80f 2013-01-17 haslers      Refactor Frobble
815813b 2013-01-17 haslers      (t)Add Wibble to Frobble
3616373 2013-01-17 haslers      Add Foo to Frobble
3b5ccf0 2013-01-17 haslers      Add Bar to Frobble
a1db9ef 2013-01-17 haslers      Add Frobble Widget

첫 번째 열이 노란색으로 표시되고 괄호 안의 'H' 'm'및 't'는 HEAD, 마스터 및 트렁크를 표시하고 일반적인 "-장식"색상으로 나타납니다.

여기에 줄 바꿈이 있으므로 수행중인 작업을 볼 수 있습니다.

git log remotes/trunk~4..HEAD --date=short
    --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s"
    | awk -F'\t' '{
         gsub(/[, ]/,"",$2);
         gsub(/HEAD/, "\033[1;36mH\033[00m",$2);
         gsub(/master/, "\033[1;32mm\033[00m",$2);
         gsub(/trunk/, "\033[1;31mt\033[00m",$2);
         print $1 "\t" gensub(/([\(\)])/, "\033[0;33m\\1\033[00m","g",$2) $3}'

나는 다음과 같이 "단계 화"되었다.

git config alias.staged '!git log remotes/trunk~4..HEAD --date=short --pretty=format:"%C(yellow)%h%C(white) %ad %aN%x09%d%x09%s" | awk -F"\t" "{gsub(/[, ]/,\"\",\$2);gsub(/HEAD/, \"\033[1;36mH\033[00m\",\$2);gsub(/master/, \"\033[1;32mm\033[00m\",\$2);gsub(/trunk/, \"\033[1;31mt\033[00m\",\$2);print \$1 \"\t\" gensub(/([\(\)])/, \"\033[0;33m\\\\\1\033[00m\",\"g\",\$2) \$3}"'

(그것을 탈출하는 더 쉬운 방법이 있습니까? 탈출 해야하는 것을 해결하는 것이 약간 까다 롭습니다)


이 스크립트의 현재 버전은 ~ 300LOC이며 더 많은 기능을 수행합니다 .¶-한 줄 / 여러 줄 커밋 메시지를 전환하는 옵션 ¶-한 줄 모드에서 줄 공백 / 줄 끝 표시. 예 : ¶-param을 통한 범위 지정 ¶-이슈 #의 하이라이트-커밋 메시지에서 하이라이트 / ^-(Fix | Add | Refactor) /
Sam Hasler

자동 강력한 별칭 인용에 대해서는 이 답변을 참조하십시오 . ~ 300LOC를 요점에서 공유 하시겠습니까?
Tom Hale

고마워 톰! 해당 스크립트를 게시하는 데 어려움을 겪는 경우 (일부 기밀 / 회사 특정 항목을 제거해야 함) 여기에 핑을 보냅니다.
Sam Hasler

1

위에서 언급 한 모든 제안 %s은 주제에 자리 표시자를 사용 합니다. 서식을 지정 하면 줄 바꿈이 유지 되고 여러 줄 커밋 메시지가 찌그러져 표시 %B되므로 사용하는 것이 좋습니다 .%s

git log --pretty=format:"%h%x09%an%x09%ai%x09%B"

0

이것을 프로젝트 폴더에서 실행하십시오 :

$ git log --pretty=format:"%C(yellow)%h %ar %C(auto)%d %Creset %s , %Cblue%cn" --graph --all

원하는 경우 ~ / .gitconfig에 다음 줄을 추가하십시오.

[alias]
    ...
    list = log --pretty=format:\"%C(yellow)%h %ar %C(auto)%d %Creset %s, %Cblue%cn\" --graph --all

0

git log --pretty = fuller를 시도하면 다음과 같이 표시됩니다 .- 저자 : 작성자 날짜 : 커밋 : 커밋 날짜 :

도움이 되었기를 바랍니다.

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