git diff로 변경 내용 상세 비교(작업 디렉터리·스테이징·커밋 간), git show로 특정 커밋 내용 확인, git restore로 파일 되돌리기, diff 출력 읽는 방법까지 변경 추적의 모든 것을 익힙니다.
🎯 학습 목표
이 강을 마치면 다음을 할 수 있습니다.
git diff출력을 읽고 어떤 내용이 변경됐는지 파악할 수 있습니다.- 작업 디렉터리, 스테이징 영역, 커밋 간의 차이를 각각 비교할 수 있습니다.
git show로 특정 커밋의 상세 내용을 확인할 수 있습니다.git restore로 수정한 파일을 이전 상태로 안전하게 되돌릴 수 있습니다.
🔎 git diff — 변경 내용 상세 비교
이 섹션에서는 파일의 어떤 줄이 어떻게 변경됐는지 정확하게 보여주는 git diff를 살펴보겠습니다.
git diff는 "어떤 내용이 바뀌었는가"를 줄 단위로 보여줍니다. 커밋 전에 내가 어떤 변경을 했는지 검토하거나, 두 버전의 차이를 파악할 때 필수적으로 사용합니다.
# 1. 작업 디렉터리의 변경 사항 보기 (스테이징 전 파일들)
git diff
# 2. 스테이징 영역의 변경 사항 보기 (add 후, commit 전)
git diff --staged
# 또는
git diff --cached
# 3. 두 커밋 사이의 차이 비교
git diff a1b2c3d 7890abc
# 4. 특정 파일만 비교
git diff index.html
# 5. 현재와 특정 브랜치 비교
git diff main feature-branch
📖 diff 출력 읽는 방법
이 섹션에서는 git diff의 출력 형식을 이해하고 변경 내용을 정확하게 읽는 방법을 살펴보겠습니다.
git diff 출력이 처음에는 낯설게 느껴질 수 있습니다. 형식을 이해하면 어떤 줄이 추가되고 삭제됐는지 명확하게 파악할 수 있습니다.
# git diff 출력 예시
diff --git a/index.html b/index.html
index 1234567..abcdef0 100644
--- a/index.html # 변경 전 파일 (a 버전)
+++ b/index.html # 변경 후 파일 (b 버전)
@@ -10,7 +10,8 @@ # 변경된 위치 (- 이전 10번째 줄부터 7줄, + 새 10번째 줄부터 8줄)
<div class="container">
- <h1>이전 제목</h1> # - (빨간색): 삭제된 줄
+ <h1>새로운 제목</h1> # + (초록색): 추가된 줄
+ <p>새로 추가된 단락</p> # + (초록색): 추가된 줄
<p>기존 내용</p> # 공백으로 시작: 변경 없음 (맥락 표시용)
출력 읽는 핵심 규칙입니다.
-로 시작하는 줄: 삭제된 내용 (빨간색으로 표시됨)+로 시작하는 줄: 추가된 내용 (초록색으로 표시됨)- 공백으로 시작하는 줄: 변경 없음, 맥락 파악용으로만 표시
@@헤더: 변경이 일어난 줄 번호 범위
수정은 "삭제 + 추가"로 표현됩니다. "이전 제목"을 "새로운 제목"으로 바꾸면 -이전 제목 줄이 삭제되고 +새로운 제목 줄이 추가된 것으로 나타납니다.
🔍 git show — 특정 커밋 내용 확인
이 섹션에서는 특정 커밋의 상세 정보와 변경 내용을 조회하는 git show를 살펴보겠습니다.
git show는 특정 커밋의 메타데이터(작성자, 날짜, 메시지)와 변경 내용(diff)을 함께 보여줍니다. "이 커밋이 정확히 무엇을 바꿨는가"를 확인할 때 사용합니다.
# 가장 최근 커밋 보기 (HEAD)
git show
# 특정 커밋 보기 (커밋 해시 앞 7자리)
git show a1b2c3d
# 특정 커밋의 특정 파일 변경만 보기
git show a1b2c3d:index.html
# 특정 커밋 시점의 파일 내용 보기 (diff 아닌 전체 내용)
git show HEAD:index.html
# 출력 예시:
# commit a1b2c3d4e5f6...
# Author: 홍길동 <gildong@example.com>
# Date: Mon Jan 15 14:30:00 2024 +0900
#
# feat: 로그인 기능 추가
#
# diff --git a/login.html b/login.html
# ... (이하 변경 내용)
↩️ git restore — 파일 되돌리기
이 섹션에서는 실수로 수정한 파일을 안전하게 이전 상태로 되돌리는 git restore를 살펴보겠습니다.
파일을 수정했다가 "역시 이전이 더 나았어" 하고 되돌리고 싶을 때가 있습니다. git restore는 이럴 때 사용하는 명령어입니다. 상황에 따라 두 가지 용도로 사용합니다.
# 용도 1: 작업 디렉터리의 수정 취소 (마지막 커밋 상태로 되돌리기)
git restore index.html # index.html의 수정 사항 버리기
git restore . # 모든 파일 수정 취소
# 용도 2: 스테이징 취소 (add 취소, 파일 내용은 유지)
git restore --staged index.html
# 용도 3: 특정 커밋 시점의 파일로 되돌리기
git restore --source=a1b2c3d index.html
⚠️ 중요한 경고: git restore로 작업 디렉터리의 수정을 취소하면 복구가 불가능합니다. 아직 커밋하지 않은 변경 사항은 Git에 저장돼 있지 않으므로 삭제하면 영원히 사라집니다. 실행 전에 반드시 git status와 git diff로 어떤 내용인지 확인한 뒤 신중하게 사용하세요.
| 명령어 | 취소 대상 | 복구 가능 |
|---|---|---|
git restore 파일 |
작업 디렉터리의 수정 취소 | ❌ 불가능 (신중하게 사용) |
git restore --staged 파일 |
스테이징 취소 (파일 내용 유지) | ✅ 가능 (파일 내용은 그대로) |
🔬 실전 활용 — 커밋 전 변경 사항 검토 워크플로
이 섹션에서는 커밋 전 변경 내용을 꼼꼼히 검토하는 실전 워크플로를 살펴보겠습니다.
좋은 커밋을 만들기 위한 실전 워크플로입니다. 이 순서를 습관화하면 실수 없는 깔끔한 커밋 히스토리를 유지할 수 있습니다.
# 1. 현재 상태 확인
git status
# 2. 변경 내용 상세 확인 (add 전)
git diff
# 3. 커밋에 포함할 파일 스테이징
git add 파일명
# 4. 스테이징된 내용 재확인
git diff --staged
# 5. 확인 후 커밋
git commit -m "feat: 의미 있는 커밋 메시지"
# 6. 커밋 결과 확인
git log --oneline -3
4단계에서 스테이징된 내용을 한 번 더 확인하는 것이 중요합니다. 원치 않는 변경 사항(디버그 코드, 임시 주석 등)이 섞여 들어가지 않았는지 이 시점에서 최종 검토합니다.
📝 핵심 요약
5강에서 배운 내용을 정리해 보겠습니다.
# 오늘의 핵심 명령어
git diff # 작업 디렉터리 변경 사항 (스테이징 전)
git diff --staged # 스테이징된 변경 사항 (커밋 전)
git diff 커밋1 커밋2 # 두 커밋 간 비교
git show # 최근 커밋 상세 보기
git show 해시값 # 특정 커밋 상세 보기
git restore 파일 # 수정 취소 (⚠️ 복구 불가)
git restore --staged 파일 # 스테이징 취소 (파일 내용 유지)
diff 출력 기호 요약: - 삭제된 줄 | + 추가된 줄 | 공백 변경 없음
다음 강인 6강 — .gitignore에서는 Git이 추적하지 않아야 할 파일들을 관리하는 방법을 배웁니다. 비밀번호가 담긴 환경 변수 파일, 빌드 결과물, OS 임시 파일을 저장소에서 제외하는 것은 보안과 협업 양쪽에서 매우 중요합니다!
관련 주제
- git diff
- git diff --staged
- git show
- git restore
- 변경 내용 비교
- 개발·프로그래밍
- 개발·프로그래밍 강의
- 깃허브 사용법 18강 — Git & GitHub 협업
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
깃허브 사용법 18강 — Git & GitHub 협업
이 강의가 속한 시리즈는 총 7강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
