[GitHub 100일 챌린지] Day 37 - git log 히스토리 보기
[GitHub 100일 챌린지] Day 37 - git log 히스토리 보기
100일 챌린지 Day 37 - 커밋 히스토리를 다양한 방식으로 조회합니다
배울 내용
- log 기본 사용법
- log 포맷 옵션
- log 필터링
Topic1. log 기본 사용법
git log = 커밋 히스토리 조회
프로젝트의 모든 커밋 기록을 확인하는 필수 명령어입니다.
기본 사용법
1
git log
출력 예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
commit a1b2c3d4e5f6g7h8i9j0 (HEAD -> main, origin/main)
Author: Your Name <you@example.com>
Date: Wed Feb 5 14:30:00 2025 +0900
Add login feature
- Implement user authentication
- Add login form
- Add session management
commit k9l8m7n6o5p4q3r2s1t0
Author: Your Name <you@example.com>
Date: Wed Feb 5 10:15:00 2025 +0900
Update README
commit u0v9w8x7y6z5a4b3c2d1
Author: Team Member <team@example.com>
Date: Tue Feb 4 16:45:00 2025 +0900
Fix bug in payment module
출력 구조
각 커밋 정보:
1
2
3
4
5
6
7
commit [SHA-1 해시] # 커밋 고유 ID
Author: [이름 <이메일>] # 작성자
Date: [날짜 시간] # 커밋 시점
# 빈 줄
[커밋 메시지] # 제목
# 빈 줄
[상세 설명] # 본문 (선택)
HEAD와 브랜치 표시:
1
(HEAD -> main, origin/main)
의미:
HEAD: 현재 위치main: 로컬 main 브랜치origin/main: Remote main 브랜치
간결한 출력 (oneline)
1
git log --oneline
출력:
1
2
3
4
a1b2c3d (HEAD -> main) Add login feature
k9l8m7n Update README
u0v9w8x Fix bug in payment module
e4f5g6h Initial commit
장점:
- 한 줄에 하나의 커밋
- 짧은 해시 (7자리)
- 커밋 메시지 제목만
- 전체 흐름 파악에 유리
개수 제한
1
2
3
4
5
# 최근 5개
git log -5
# oneline + 최근 3개
git log --oneline -3
상세 정보 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
# 변경된 파일 통계
git log --stat
# 출력:
commit a1b2c3d
Author: Your Name <you@example.com>
Date: Wed Feb 5 14:30:00 2025 +0900
Add login feature
src/auth.js | 45 +++++++++++++++++++++
src/login.html | 23 +++++++++++
2 files changed, 68 insertions(+)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 변경 내용 diff까지
git log -p
# 출력: 각 커밋마다 전체 diff 표시
commit a1b2c3d
...
diff --git a/src/auth.js b/src/auth.js
new file mode 100644
index 0000000..1234567
--- /dev/null
+++ b/src/auth.js
@@ -0,0 +1,45 @@
+function login(username, password) {
+ // ...
+}
해보기: 다양한 log 형식 비교
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 1. 기본 log
git log
# 2. 간결한 log
git log --oneline
# 3. 최근 5개만
git log --oneline -5
# 4. 통계 포함
git log --stat -2
# 5. diff 포함 (주의: 출력 많음)
git log -p -1
결과: 상황에 맞는 log 형식을 선택할 수 있습니다
Topic2. log 포맷 옵션
log 포맷 = 원하는 정보만 보기
커스터마이징을 통해 필요한 정보만 효율적으로 확인합니다.
graph 옵션 (브랜치 시각화)
1
git log --oneline --graph
출력:
1
2
3
4
5
6
7
* a1b2c3d (HEAD -> main) Merge branch 'feature'
|\
| * k9l8m7n Add feature B
| * u0v9w8x Add feature A
|/
* e4f5g6h Update README
* h7i8j9k Initial commit
브랜치 구조:
1
2
3
main: *---*---*---M (Merge)
\ /
feature: *---*
decorate 옵션 (브랜치/태그 표시)
1
git log --oneline --decorate
출력:
1
2
3
a1b2c3d (HEAD -> main, origin/main, tag: v1.0) Release v1.0
k9l8m7n (feature) Add new feature
u0v9w8x Fix critical bug
all 옵션 (모든 브랜치)
1
git log --oneline --graph --all
출력:
1
2
3
4
5
6
7
* a1b2c3d (HEAD -> main, origin/main) Latest main
| * k9l8m7n (feature) Feature work
|/
* u0v9w8x Common ancestor
| * e4f5g6h (hotfix) Urgent fix
|/
* h7i8j9k Initial commit
모든 브랜치의 커밋을 함께 표시합니다.
format 옵션 (커스텀 포맷)
기본 플레이스홀더:
1
2
3
4
5
6
7
%H = 전체 커밋 해시
%h = 짧은 커밋 해시
%an = 작성자 이름
%ae = 작성자 이메일
%ad = 작성 날짜
%s = 커밋 메시지 제목
%b = 커밋 메시지 본문
예시 1: 간결한 포맷:
1
2
3
4
5
6
git log --format="%h - %s (%an)"
# 출력:
a1b2c3d - Add login feature (Your Name)
k9l8m7n - Update README (Your Name)
u0v9w8x - Fix bug (Team Member)
예시 2: 상세 포맷:
1
2
3
4
5
6
git log --format="%h | %ad | %an | %s" --date=short
# 출력:
a1b2c3d | 2025-02-05 | Your Name | Add login feature
k9l8m7n | 2025-02-05 | Your Name | Update README
u0v9w8x | 2025-02-04 | Team Member | Fix bug
예시 3: JSON 스타일:
1
2
3
4
5
git log --format='{"hash":"%h","author":"%an","date":"%ad","message":"%s"}' --date=iso
# 출력:
{"hash":"a1b2c3d","author":"Your Name","date":"2025-02-05 14:30:00 +0900","message":"Add login feature"}
{"hash":"k9l8m7n","author":"Your Name","date":"2025-02-05 10:15:00 +0900","message":"Update README"}
날짜 형식 옵션
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 기본 형식
git log --date=default
# ISO 8601 형식
git log --date=iso
# 2025-02-05 14:30:00 +0900
# 짧은 형식
git log --date=short
# 2025-02-05
# 상대 시간
git log --date=relative
# 2 hours ago
# RFC 형식
git log --date=rfc
# Wed, 5 Feb 2025 14:30:00 +0900
# 유닉스 타임스탬프
git log --date=unix
# 1738735800
실전 포맷 조합
개발자용 요약:
1
git log --oneline --graph --decorate --all -10
릴리스 노트용:
1
git log --format="- %s (%h)" v1.0..v2.0
커밋 통계:
1
2
3
4
5
6
git log --format="%an" | sort | uniq -c | sort -rn
# 출력:
15 Your Name
8 Team Member A
3 Team Member B
해보기: 유용한 포맷 설정
1
2
3
4
5
6
7
8
9
10
11
# 1. 그래프 + 색상
git log --oneline --graph --all --decorate
# 2. 커스텀 포맷
git log --format="%C(yellow)%h%C(reset) - %s %C(green)(%cr)%C(reset) %C(blue)<%an>%C(reset)" -5
# 3. Alias 설정 (추천!)
git config --global alias.lg "log --oneline --graph --all --decorate"
# 4. 사용
git lg
결과: 프로젝트 히스토리를 시각적으로 이해할 수 있습니다
Topic3. log 필터링
log 필터링 = 원하는 커밋만 찾기
방대한 히스토리에서 필요한 정보만 추출합니다.
시간 기반 필터링
특정 날짜 이후:
1
2
3
4
5
6
7
8
# 2025년 2월 1일 이후
git log --since="2025-02-01"
# 1주일 전부터
git log --since="1 week ago"
# 3일 전부터
git log --since="3 days ago"
특정 날짜 이전:
1
2
3
4
5
# 2025년 1월 31일까지
git log --until="2025-01-31"
# 어제까지
git log --until="yesterday"
기간 지정:
1
2
3
4
5
# 2월 1일 ~ 2월 5일
git log --since="2025-02-01" --until="2025-02-05"
# 지난주
git log --since="1 week ago" --until="yesterday"
작성자 기반 필터링
1
2
3
4
5
6
7
8
9
10
11
# 특정 작성자
git log --author="Your Name"
# 정규식 사용
git log --author="Your.*"
# 여러 작성자 (OR)
git log --author="Your Name\|Team Member"
# 제외
git log --author="^(?!Your Name).*"
커밋 메시지 기반 필터링
1
2
3
4
5
6
7
8
9
10
11
# 메시지에 "fix" 포함
git log --grep="fix"
# 대소문자 무시
git log --grep="FIX" -i
# 여러 키워드 (OR)
git log --grep="fix\|bug"
# AND 조건
git log --grep="login" --grep="feature" --all-match
파일 기반 필터링
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 특정 파일 변경 이력
git log -- path/to/file.js
# 여러 파일
git log -- file1.js file2.js
# 디렉토리
git log -- src/
# 삭제된 파일 포함
git log --all -- deleted-file.js
# 파일 변경 내용 포함
git log -p -- file.js
변경 내용 기반 필터링
특정 코드 변경:
1
2
3
4
5
# "function login" 추가/삭제된 커밋
git log -S "function login"
# 정규식 사용
git log -G "function.*login"
차이:
1
2
-S: 정확한 문자열 매칭
-G: 정규식 패턴 매칭
브랜치 기반 필터링
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# main에는 없고 feature에만 있는 커밋
git log main..feature
# feature에는 없고 main에만 있는 커밋
git log feature..main
# main과 feature의 차이 (양방향)
git log main...feature
# 특정 커밋부터
git log a1b2c3d..HEAD
# 태그 사이
git log v1.0..v2.0
병합 커밋 필터링
1
2
3
4
5
6
7
8
# 병합 커밋만
git log --merges
# 병합 커밋 제외
git log --no-merges
# 병합 커밋의 양쪽 부모 표시
git log --merges --parents
복합 필터링
실전 예시 1: 특정 작성자의 최근 버그 수정:
1
git log --author="Your Name" --grep="fix\|bug" --since="1 month ago" --oneline
실전 예시 2: 특정 파일의 최근 변경 (작성자별):
1
git log --format="%h - %an: %s" --since="2 weeks ago" -- src/auth.js
실전 예시 3: 릴리스 간 주요 변경사항:
1
git log v1.0..v2.0 --no-merges --format="- %s (%h)" --grep="feat:"
실전 예시 4: 특정 함수 변경 이력:
1
git log -S "function calculateTotal" -p -- src/
고급 필터링
첫 번째/마지막 커밋 찾기:
1
2
3
4
5
# 첫 커밋
git log --reverse --oneline | head -1
# 마지막 커밋
git log -1 --oneline
커밋 개수 세기:
1
2
3
4
5
6
7
8
9
10
# 전체 커밋 수
git log --oneline | wc -l
# 특정 기간
git log --since="1 month ago" --oneline | wc -l
# 작성자별
git shortlog -sn
# 15 Your Name
# 8 Team Member
해보기: 실전 필터링 조합
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 최근 1주일간 내 작업
git log --author="Your Name" --since="1 week ago" --oneline
# 2. README 변경 이력
git log --oneline -- README.md
# 3. 버그 수정 커밋만
git log --grep="fix" --no-merges --oneline
# 4. 특정 기간의 특정 파일
git log --since="2025-02-01" --until="2025-02-05" -- src/auth.js
# 5. 릴리스 노트 생성
git log v1.0..HEAD --no-merges --format="- %s"
# 6. 코드 리뷰용
git log --author="Team Member" --since="yesterday" -p
결과: 필요한 커밋만 정확하게 찾을 수 있습니다
정리
완료 체크:
- log 기본 사용법과 출력 구조를 안다
- 다양한 포맷 옵션으로 정보를 시각화할 수 있다
- 필터링으로 원하는 커밋만 찾을 수 있다
핵심 명령어:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 기본
git log # 전체 히스토리
git log --oneline # 간결한 출력
git log -5 # 최근 5개
git log --stat # 파일 통계
git log -p # diff 포함
# 포맷
git log --graph # 브랜치 그래프
git log --all # 모든 브랜치
git log --decorate # 브랜치/태그 표시
git log --format="%h - %s" # 커스텀 포맷
git log --date=short # 날짜 형식
# 필터링
git log --since="1 week ago" # 시간
git log --author="Name" # 작성자
git log --grep="fix" # 메시지
git log -- file.js # 파일
git log -S "code" # 코드 변경
git log main..feature # 브랜치 범위
git log --merges # 병합 커밋만
git log --no-merges # 병합 제외
유용한 Alias:
1
2
3
4
5
6
7
# 설정
git config --global alias.lg "log --oneline --graph --all --decorate"
git config --global alias.ll "log --format='%C(yellow)%h%C(reset) - %s %C(green)(%cr)%C(reset) %C(blue)<%an>%C(reset)'"
# 사용
git lg # 그래프 뷰
git ll -10 # 예쁜 로그
실전 활용:
1
2
3
4
5
1. 일일 작업 확인: git log --since="yesterday" --author="나"
2. 릴리스 노트: git log v1.0..v2.0 --no-merges
3. 코드 리뷰: git log --author="팀원" -p -3
4. 버그 추적: git log -S "버그코드" -p
5. 파일 히스토리: git log -- 파일명
다음: Day 38 - git diff 변경사항 확인 →
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.
