포스트

[GitHub 100일 챌린지] Day 39 - git show 커밋 상세보기

[GitHub 100일 챌린지] Day 39 - git show 커밋 상세보기

100일 챌린지 Day 39 - 특정 커밋의 상세 정보를 확인합니다

배울 내용

  1. show 기본 사용법
  2. 특정 객체 조회
  3. 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
git show --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


이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.