유용한 깃 로그 확인 방법들

프로젝트(깃 저장소)에서 사람 기준으로 누가 얼마나 커밋을 했는지와 같은 내용을 확인할 때는 shortlog를 사용한다.

git shortlog는 git log의 출력을 요약해주는 명령어로, 기본적으로 git shortlog [옵션] [깃 범위] [[--] 경로] 형식으로 사용한다.

주로 사용하는 옵션으로는 -s와 -n이 있는데, -s 옵션은 각 개발자별 커밋 개수를 출력해주고, 여기에 -n 옵션까지 같이 추가해주면 커밋 수를 기준으로 정렬하여 보여준다.

일반적으로 -sn 을 붙여서 git shortlog -sn 같이 사용한다.

특정 디렉토리 혹은 파일에 대해서만 확인하고 싶은 경우에는 – 뒤에 경로를 넣어준다.

예를 들어, git shortlog -- foo/bar의 형식이다.

이외에도 –after=YYYY/mm/dd, –before=YYYY/mm/dd 등을 통해 날짜 범위를 지정해주거나, –author, –grep 등 다양한 방식으로 필터링을 걸 수 있다.

자세한 내용은 역시 –help 로 확인하는 것이 베스트!

쿠버네티스 웹페이지에서 로그를 확인해보면, 나도 6월 30일 이후부터 한글 문서에 많은? 기여를 했다.

bconfiden2ui-iMac :: ~/kubernetes-io » git shortlog -sn --after=2022-06-30 -- content/ko | nl
     1	    54	Kubernetes Prow Robot
     2	    12	Jihoon Seo
     3	     7	bconfiden2


git log의 옵션 중 하나인 –oneline 은, 커밋 하나를 한 줄에 less 형식으로 띄워준다.

이 때 각 라인에는 커밋별로 커밋의 해시값과 커밋 메시지를 보여주는데, 한줄에 커밋 하나씩이기 때문에 git log --oneline | wc -l 등으로 커밋 개수를 확인할 수도 있다.

추가적인 옵션으로 –no-merges 를 넣음으로써 머지 커밋들은 표시해주지 않을 수도 있어서, 실제로 소스코드가 수정된 커밋들에 대해서만 출력한다.

shortlog와 마찬가지로 특정 경로나 파일을 지정하여 해당 내역만 뽑아낼 수 있는데, 똑같이 – 을 줘서 git log --oneline --no-merges -- [파일] 처럼 사용한다.

–after 등의 옵션 또한 붙일 수 있는데, 이외에도 거의 대부분의 필터링 옵션들이 shortlog와 동일하게 적용된다.

bconfiden2ui-iMac :: ~/kubernetes-io » git log --oneline --no-merges --after=2022/06/30 --before=2022/07/30 -- content/ko
43fe55c916 update outdated korean files in dev-1.24-ko.2 (M90-M93)
bffe565965 [ko] Dev 1.24 ko.2 Update from M1 to M10 (#35255)
14d6312957 [ko] Fix outdated files in dev-1.24-ko.2 (M21-M26) (#35220)
f8e507e8dd Fix outdated files in dev-1.24-ko.2 (M100) (#35291)
720000e38a [ko] Update outdated files dev-1.24-ko.2 (M51-M53)
3fd8eb48eb modify: indent 4 -> 3
66249b4464 modify: shell script
89f2bc1801 modify: #빌트인-서비스-검색 to /ko/.../assess-cluster-services/#discovering-builtin-services/#빌트인-서비스-검색
345209a12e modify: access-cluster-services - 104.197.5.247 to 192.0.2.1
d92788889d Translate unlocalized text 35491
4f7d6ab342 (origin/220722_Update_outdated_dev-1.24-ko.2_M54-M64) [ko] Update outdated files in dev-1.24-ko.2 (M54-M64)
b16960a8e2 [ko] Translate the glossary term 'Pod Priority'
3f21261727 [ko] Translate the glossary term 'Ephemeral Container' into Korean
b1a1f8e766 [ko] fix typo infrastructure
c5bc5ab9aa [ko] Translate the glossary term 'Cluster Infrastructure' into Korean
38983125e3 [ko] Translate docs/en/tasks/administer-cluster/namespaces into Korean
4d92fef330 Update outdated files dev-1.24-ko.2 (M11-M20)
1281acc7b6 [ko] Update outdated files dev-1.24-ko.2 (M44-M50)
578c2e815d (origin/220716_Update_outdated_dev-1.24-ko.2_M65-M70) [ko] Update outdated files in dev-1.24-ko.2 (M65-M70)
dc91547cbf [ko] Update outdated files dev-1.24-ko.2 (M80-M83)
9cde087b60 [ko]Translate the glossary term Add-ons into Korean
61aa30b74b Update outdated content on M118-M125 + Pre-apply source updates on 34359 and one more

위의 oneline 결과물을 살펴보면, 몇몇 커밋들 앞에는 브랜치명도 붙어있는 것을 볼 수 있다.

이처럼 각 브랜치의 헤드 위치도 같이 나타내주기 때문에, origin이나 upstream의 특정 브랜치 헤드가 어딘지, 그리고 현재 작업중인 내 브랜치의 헤드와 얼마나 차이나는지도 볼 수 있어서 편리하다.


앞서 oneline 옵션에서 커밋별로 해시값을 찍어줬는데, 이 커밋들 중 특정 커밋에 대한 자세한 내역을 확인하고 싶으면 git show를 사용한다.

git show [해시값]처럼 사용하면, 저자는 누구이고 언제 커밋을 했으며, 커밋 메시지, 파일 수정된 내역들, 이름이 변경된 파일들 등 커밋에 포함된 다양한 정보들을 출력해준다.

특히 어떤 파일이 수정되었는지를 diff –git과 같이 출력해주기 때문에, 해당 커밋에서 몇개의 파일이 수정되었는지도 쉽게 확인이 가능하다.

bconfiden2ui-iMac :: ~/kubernetes-io » git show 6a322318b6 | grep "diff --git"
diff --git a/content/ko/docs/setup/production-environment/windows/_index.md b/content/ko/docs/concepts/windows/_index.md
diff --git a/content/ko/docs/setup/production-environment/windows/user-guide-windows-containers.md b/content/ko/docs/concepts/windows/user-guide.md
diff --git a/content/ko/docs/reference/command-line-tools-reference/kubelet-authentication-authorization.md b/content/ko/docs/reference/access-authn-authz/kubelet-authn-authz.md

이렇게 git log –oneline 으로는 커밋 메시지를, git show 로 특정 커밋에 대한 자세한 내용등을 확인할 수 있다.

git log -p는 각 커밋별로 show 결과를 한번에 보여주기도 한다.