git log
로그를 잘 읽어야 한다
내가 사용하는 알리아스
git l
나는 로그 그래프 확인에 주로 다음 알리아스를 사용한다.
l = "log \
--color --graph \
--abbrev-commit \
--pretty=format:'%Cred%h %Creset-%C(yellow)%d %Creset%s %Cgreen(%cr)%C(bold blue)<%an>'"
git l
을 입력하면 다음과 같이 출력된다.
git lh
나는 25줄만 보고 싶은 경우가 흔한 편이어서 다음과 같이 git lh
로 git l
의 결과를 앞부분만 잘라 보는 편이다.
lh = "!git l | head -25"
git lf
git --log --follow
를 사용해 특정 파일 하나의 히스토리만 보고 싶을 때 쓴다. fzf
를 통해 파일을 선택할 수 있다.
lf = "!# 주어진 file의 history를 출력합니다.;\n\
fzf --preview=\"bat {}\" | xargs git l --follow"
lfp = "!# 주어진 file의 history를 자세히 출력합니다.;\n\
fzf --preview=\"bat {}\" | xargs git l --follow -p"
Commit Ranges
두 hash값의 차이를 다음과 같이 확인할 수 있다.
git log b ^a
- 주어진 커밋
b
에서 링크를 추적할 수 있는 커밋들을 보여준다. ^
가 붙은 커밋a
에서 추적할 수 있는 커밋들은 보여주기 대상에서 제외한다.
이 표기법은 좀 헷갈리므로, 같은 기능을 하는 ..
표기법을 사용하는 것이 좀 더 편하다.
git log a..b
다음과 같은 git 그래프가 있다고 가정하자.
다음 명령을 입력하면…
git log a..b
커밋 c2
, c3
, c4
가 출력된다.
Pro Git의 표현을 빌리자면 ..
표기법(Double Dot)을 "a에는 없지만.. b 에는 있는 커밋"1이라 설명할 수 있다.
나는 그냥 a 다음부터 b까지의 커밋을 보여준다고 생각하고 작업한다.
이 설명대로 생각하면 간단하게 응용할 수 있다. 예를 들어 "master 이후 develop에 추가된 커밋들"을 보고 싶다면 다음과 같이 하면 된다.
git log master..develop
branch 이름은 단순한 레퍼런스이므로 다음과 같이 사용할 수도 있다.
git log b6c69..528cb
git l b6c69..528cb # 알리아스 사용
같은 의미를 ^reference
와 --not reference
를 사용해 표현할 수도 있다.
..
표현은 편리하지만 2개까지만 비교할 수 있으므로, 이 방법은 3개 이상의 해시를 비교할 때 유용하다.
# master에는 없지만.. develop 에는 있는 커밋들
git log master..develop # 두 개 비교이므로 .. 으로 가능
git log ^master develop # 위와 같다
git log develop --not master # 위와 같다
3개를 비교한다면 ..
표기법으로는 할 수 없다. 그러므로 ^
나 --not
을 사용한다.
# master, develop에는 있지만 hotfix 에는 없는 커밋들
git log master develop ^hotfix # 위와 같다
git log master developt --not hotfix # 위와 같다
--pretty
--pretty=format
이 섹션에서는
--pretty=format
뒤에 붙여주는 포맷을 몇 가지 설명한다. 더 자세한 내용은man git-log
에서PRETTY FORMATS
섹션을 참고할 것.
git log --pretty=format:'%Cred%h %Creset-%C(yellow)%d %Creset%s %Cgreen(%cr)%C(bold blue)<%an>'
위와 같이 입력하면 아래와 같이 출력된다.
- 문자 하나
%n
: 개행문자%%
:%
문자%x00
: 16진수 문자
- 포매팅에 사용
%Cred
: 빨간색 (이후 문자들이 빨간색으로 출력된다)%Cgreen
: 초록색%Cblue
: 파란색%Creset
: 컬러 리셋 (리셋 이후부터 문자들의 색상이 기본색으로 출력된다)
- 커밋에 대한 정보
%H
: 커밋 해시값%h
: 커밋 해시값(짧은 버전)%T
: 트리 해시값%t
: 트리 해시값(짧은 버전)%an
: 저자 이름 (author name)%ae
: 저자 이메일 (author email)%d
: 레퍼런스 이름(태그, 브랜치 이름 등)%s
: 커밋 메시지 제목%cr
: 커밋 날짜(상대적 날짜)
참고문헌
- Pro Git 2/E / 스캇 샤콘, 벤 스트라웁 공저 / 박창우, 이성환, 최용재 공역 / 인사이트(insight) / 2016년 03월 30일
주석
-
Pro Git, 7.1장, 210쪽. '이 표현은 "master에는 없지만, experiment에는 있는 커밋"을 의미한다.' ↩