git log
로그를 잘 읽어야 한다
git
내가 사용하는 알리아스
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 master..develop
Pro Git에서는 위에서 사용한 ..
표기법(Double Dot)을 "master에는 없지만.. develop 에는 있는 커밋들"1이라 설명한다.
이 설명대로 생각하면 간단하게 응용할 수 있다. 위의 예제를 뒤집어서 "develop에는 있지만.. master에는 없는 커밋들"을 보고 싶다면 다음과 같이 하면 된다.
git log develop..master
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 # 위와 같다
참고문헌
- Pro Git 2/E / 스캇 샤콘, 벤 스트라웁 공저 / 박창우, 이성환, 최용재 공역 / 인사이트(insight) / 2016년 03월 30일
주석
-
Pro Git, 7.1장, 210쪽. ↩