100일 챌린지 Day 39 - 특정 커밋의 상세 정보를 확인합니다
배울 내용
- show 기본 사용법
- 특정 객체 조회
- show 활용 팁
Topic1. show 기본 사용법
git show = 커밋 완전 해부
특정 커밋의 메타데이터와 변경사항을 한 번에 보여주는 명령어입니다.
기본 사용법
1
2
3
| git show
# 또는
git show HEAD
|
최근 커밋의 모든 정보를 표시합니다.
출력 예시:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| 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
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) {
+ // ...
+}
...
|
출력 구조
1. 커밋 메타데이터:
1
2
3
4
5
| commit [SHA-1 해시] (브랜치/태그)
Author: [이름 <이메일>]
Date: [날짜 시간]
[커밋 메시지]
|
2. 변경사항 (diff):
1
2
| diff --git a/파일명 b/파일명
...
|
git log -p -1과 유사하지만 더 간결합니다.
특정 커밋 보기
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| # SHA-1 해시로
git show a1b2c3d
# 짧은 해시로
git show a1b2c3d
# 상대 참조로
git show HEAD~1 # 1개 이전 커밋
git show HEAD~2 # 2개 이전 커밋
git show HEAD^ # 부모 커밋
# 브랜치명으로
git show main
git show feature-branch
# 태그로
git show v1.0.0
|
통계만 보기 (–stat)
출력:
1
2
3
4
5
6
7
8
9
| 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(+)
|
diff 없이 파일 통계만 표시합니다.
메타데이터만 보기 (–no-patch)
1
2
3
| git show --no-patch
# 또는
git show -s
|
출력:
1
2
3
4
5
6
7
8
9
| commit a1b2c3d
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
|
변경사항 없이 커밋 정보만 표시합니다.
특정 정보만 추출
1
2
3
4
5
6
7
8
9
10
11
12
| # 커밋 메시지만
git show -s --format=%s
# 작성자만
git show -s --format=%an
# 날짜만
git show -s --format=%ad
# 커스텀 포맷
git show -s --format="%h - %s (%an, %ar)"
# 출력: a1b2c3d - Add login feature (Your Name, 2 days ago)
|
여러 커밋 동시에
1
2
3
4
5
| # 여러 커밋
git show a1b2c3d e4f5g6h
# 범위
git show HEAD~3 HEAD~2 HEAD~1
|
해보기: 다양한 show 사용법
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| # 1. 최근 커밋 전체
git show
# 2. 통계만
git show --stat
# 3. 메타데이터만
git show -s
# 4. 이전 커밋
git show HEAD~1
# 5. 특정 커밋
git show a1b2c3d
# 6. 브랜치 최신 커밋
git show main
# 7. 태그
git show v1.0
# 8. 커밋 메시지만
git show -s --format=%s
|
결과: 커밋의 다양한 정보를 효율적으로 조회할 수 있습니다
Topic2. 특정 객체 조회
show = Git 객체 만능 조회 도구
커밋뿐만 아니라 다양한 Git 객체를 조회할 수 있습니다.
특정 파일의 특정 버전
1
2
3
4
5
6
7
8
9
10
11
12
| # 특정 커밋의 특정 파일
git show a1b2c3d:src/auth.js
# HEAD의 파일
git show HEAD:README.md
# 이전 버전 파일
git show HEAD~1:package.json
# 다른 브랜치의 파일
git show main:src/config.js
git show feature:src/new-file.js
|
출력: 파일 내용만 표시 (diff 없음)
특정 파일의 변경사항만
1
2
3
4
5
6
7
8
9
10
11
| # 최근 커밋에서 특정 파일만
git show HEAD -- src/auth.js
# 특정 커밋의 특정 파일
git show a1b2c3d -- src/auth.js
# 여러 파일
git show HEAD -- src/auth.js src/main.js
# 디렉토리
git show HEAD -- src/
|
출력: 해당 파일의 diff만 표시
태그 정보 보기
1
2
3
4
5
| # Lightweight 태그
git show v1.0
# Annotated 태그 (메타데이터 포함)
git show v2.0
|
Annotated 태그 출력:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| tag v2.0
Tagger: Your Name <you@example.com>
Date: Thu Feb 6 10:00:00 2025 +0900
Release version 2.0
Major features:
- Authentication system
- User dashboard
- API endpoints
commit a1b2c3d
Author: Your Name <you@example.com>
...
|
병합 커밋 보기
1
2
| # 병합 커밋
git show merge-commit-hash
|
출력:
1
2
3
4
5
6
7
8
9
10
11
12
13
| commit m1e2r3g4e5
Merge: a1b2c3d e4f5g6h
Author: Your Name <you@example.com>
Date: Thu Feb 6 15:00:00 2025 +0900
Merge branch 'feature' into main
diff --cc src/main.js
index 1111111,2222222..3333333
--- a/src/main.js
+++ b/src/main.js
@@@ -10,7 -10,8 +10,9 @@@
...
|
병합 커밋의 각 부모 보기:
1
2
3
4
5
| # 첫 번째 부모 (main)
git show m1e2r3g4e5^1
# 두 번째 부모 (feature)
git show m1e2r3g4e5^2
|
Stash 보기
1
2
3
4
5
6
7
8
9
10
| # 최근 stash
git show stash@{0}
# 특정 stash
git show stash@{2}
# stash 목록
git stash list
# stash@{0}: WIP on main: a1b2c3d Add feature
# stash@{1}: WIP on feature: e4f5g6h Fix bug
|
Blob/Tree 객체 보기
1
2
3
4
5
| # Blob (파일 내용)
git show a1b2c3d4e5f6:path/to/file
# Tree (디렉토리 구조)
git show a1b2c3d:src/
|
Tree 출력:
1
2
3
4
5
| tree a1b2c3d:src/
100644 blob e4f5g6h auth.js
100644 blob h7i8j9k main.js
040000 tree k9l8m7n components/
|
특정 줄만 보기
1
2
3
4
5
| # 파일의 특정 줄 (git show + grep)
git show HEAD:src/auth.js | sed -n '10,20p'
# 함수만 찾기
git show HEAD:src/auth.js | grep -A 10 "function login"
|
해보기: 다양한 객체 조회
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| # 1. 특정 커밋의 파일 보기
git show HEAD~1:README.md
# 2. 다른 브랜치의 파일
git show main:package.json
# 3. 특정 파일 변경사항만
git show HEAD -- src/auth.js
# 4. 태그 정보
git show v1.0
# 5. Stash 내용
git show stash@{0}
# 6. 병합 커밋
git log --merges -1 --oneline
# (merge commit hash 복사)
git show <merge-hash>
# 7. 파일 내용 비교
diff <(git show main:config.js) <(git show feature:config.js)
|
결과: Git의 다양한 객체를 자유롭게 조회할 수 있습니다
Topic3. show 활용 팁
show 활용 = 일상 업무 효율화
실제 개발 과정에서 유용한 활용법들입니다.
팁 1: 빠른 커밋 리뷰
1
2
3
4
5
6
7
| # Alias 설정
git config --global alias.last 'show -s'
git config --global alias.lastf 'show --stat'
# 사용
git last # 메타데이터만
git lastf # 통계 포함
|
팁 2: 파일 히스토리 탐색
특정 파일의 변경 히스토리:
1
2
3
4
5
6
7
| # 1. 파일의 커밋 히스토리
git log --oneline -- src/auth.js
# 2. 각 커밋에서 어떻게 변경됐는지
git show a1b2c3d -- src/auth.js
git show e4f5g6h -- src/auth.js
git show h7i8j9k -- src/auth.js
|
스크립트로 자동화:
1
2
3
4
5
6
7
8
| #!/bin/bash
# show-file-history.sh
FILE=$1
for commit in $(git log --format=%h -- "$FILE"); do
echo "=== Commit $commit ==="
git show -s $commit
echo ""
done
|
팁 3: 코드 리뷰 워크플로우
1
2
3
4
5
6
7
8
9
10
11
12
13
| # 1. PR의 커밋 목록 보기
git log main..feature --oneline
# 2. 각 커밋 리뷰
git show commit1
git show commit2
git show commit3
# 3. 특정 파일만 집중 리뷰
git show commit1 -- critical-file.js
# 4. 통계로 영향 범위 파악
git show commit1 --stat
|
팁 4: 버그 발견 시 빠른 조사
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 버그가 있는 파일 확인
git log -p -S "buggyCode" -- src/module.js
# 2. 의심되는 커밋 상세보기
git show suspicious-commit
# 3. 그 시점의 전체 파일 보기
git show suspicious-commit:src/module.js
# 4. 이전 버전과 비교
diff <(git show suspicious-commit^:src/module.js) \
<(git show suspicious-commit:src/module.js)
|
팁 5: 릴리스 노트 작성
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 태그 간 모든 커밋
git log v1.0..v2.0 --oneline
# 2. 주요 변경사항만
git log v1.0..v2.0 --grep="^feat:" --oneline
# 3. 각 기능 상세보기
for commit in $(git log v1.0..v2.0 --grep="^feat:" --format=%h); do
echo "## $(git show -s --format=%s $commit)"
git show $commit --stat
echo ""
done > release-notes.md
|
팁 6: 설정 파일 버전 관리
1
2
3
4
5
6
7
8
| # 개발/운영 환경 설정 비교
diff <(git show dev:config.json) <(git show prod:config.json)
# 특정 시점의 설정 복원
git show v1.0:config.json > config.json.backup
# 설정 변경 히스토리
git log -p -- config.json
|
팁 7: 문서 버전 비교
1
2
3
4
5
6
7
8
9
| # README 변경사항 추적
git log --oneline -- README.md
# 특정 버전 보기
git show v1.0:README.md > README-v1.0.md
git show v2.0:README.md > README-v2.0.md
# 비교
diff README-v1.0.md README-v2.0.md
|
팁 8: show + 다른 도구 조합
파일 편집기로 열기:
1
2
3
4
5
| # 이전 버전을 vim으로
git show HEAD~1:src/auth.js | vim -
# 특정 커밋 버전을 VS Code로
git show a1b2c3d:config.json | code -
|
JSON 파싱:
1
2
3
4
5
6
| # package.json 버전 확인
git show HEAD:package.json | jq .version
# 의존성 비교
diff <(git show v1.0:package.json | jq .dependencies) \
<(git show v2.0:package.json | jq .dependencies)
|
통계 수집:
1
2
3
4
5
| # 최근 10개 커밋의 변경 라인 수
for i in {0..9}; do
echo -n "HEAD~$i: "
git show HEAD~$i --shortstat | grep -oP '\d+ insertion|\d+ deletion'
done
|
팁 9: CI/CD에서 활용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #!/bin/bash
# deploy.sh
# 배포할 커밋 정보 로깅
echo "Deploying commit:"
git show -s --format="%h %s (%an)"
# 변경된 파일 목록
echo "Changed files:"
git show --name-only --format=""
# 중요 파일 변경 시 알림
if git show --name-only --format="" | grep -q "config.production.js"; then
echo "WARNING: Production config changed!"
git show HEAD -- config.production.js
fi
|
팁 10: 디버깅 보조 도구
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # Alias로 편리하게
git config --global alias.debug '!f() {
echo "=== Commit Info ===";
git show -s $1;
echo "";
echo "=== Changed Files ===";
git show --name-status --format="" $1;
echo "";
echo "=== Changes ===";
git show $1;
}; f'
# 사용
git debug a1b2c3d
|
해보기: 실전 워크플로우
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 시나리오: 어제 작업 내용 리뷰
# 1. 어제 커밋 목록
git log --since="yesterday" --oneline
# 2. 각 커밋 빠르게 리뷰
git show --stat a1b2c3d
git show --stat e4f5g6h
# 3. 중요한 변경사항 상세보기
git show a1b2c3d -- src/critical.js
# 4. 설정 파일 확인
git show HEAD:config.json | jq .
# 5. 릴리스 준비 확인
git show HEAD --stat
# 6. 문제 발견 시 이전 버전 복원
git show HEAD~1:src/critical.js > src/critical.js.backup
|
결과: git show를 활용하여 효율적인 코드 관리를 할 수 있습니다
정리
완료 체크:
- show 기본 사용법과 출력 구조를 안다
- 다양한 Git 객체를 조회할 수 있다
- 실전에서 show를 활용할 수 있다
핵심 명령어:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| # 기본 사용
git show # 최근 커밋 전체
git show HEAD # 최근 커밋
git show a1b2c3d # 특정 커밋
git show HEAD~1 # 이전 커밋
git show --stat # 통계만
git show -s # 메타데이터만
# 특정 객체
git show HEAD:file.js # 파일 내용
git show HEAD -- file.js # 파일 변경사항
git show main:config.json # 다른 브랜치 파일
git show v1.0 # 태그
git show stash@{0} # Stash
# 포맷
git show -s --format=%s # 커밋 메시지만
git show -s --format=%an # 작성자만
git show --name-only # 파일 목록만
git show --name-status # 파일 + 상태
# 병합 커밋
git show merge-hash # 병합 커밋
git show merge-hash^1 # 첫 번째 부모
git show merge-hash^2 # 두 번째 부모
|
show vs log vs diff:
1
2
3
| git show = 특정 커밋 상세 (메타데이터 + diff)
git log = 커밋 히스토리 (여러 커밋 나열)
git diff = 변경사항 비교 (두 버전 비교)
|
유용한 Alias:
1
2
3
| git config --global alias.last 'show -s'
git config --global alias.lastf 'show --stat'
git config --global alias.showf 'show --name-status'
|
실전 활용:
1
2
3
4
5
6
| 1. 커밋 리뷰: git show --stat
2. 파일 히스토리: git show commit:file
3. 버그 조사: git show suspicious-commit -- file
4. 릴리스 노트: git show tag
5. 설정 비교: diff <(git show v1:config) <(git show v2:config)
6. CI/CD: git show -s --format="%h %s"
|
다음: Day 40 - Git Alias →