프로그래밍/Git

[Git 명령어] git diff 쉽게 이해하기

분석벌레 2025. 12. 11. 10:53
728x90
Git diff 완전 정복 가이드 (입문자용)
Git · 입문자용

📝 Git diff 완전 정복 가이드

Git을 처음 쓰는 사람도 이해할 수 있도록 git diff의 기본 개념부터 커밋·브랜치 비교까지 한 번에 정리한 가이드입니다.

난이도: 초급 키워드: git diff, commit, branch
#git #git-diff #입문 #버전관리

Git을 처음 접하면 가장 많이 헷갈리는 명령어 중 하나가 바로 git diff입니다. 커밋끼리 비교하고, 브랜치끼리 비교하고, 내가 지금 수정한 내용도 보고… 할 수 있는 건 많은데 막상 쓰려면 “언제 어떤 diff를 써야 하지?” 싶을 때가 많죠.

이 글에서는 Git diff의 기본 개념부터 commit/branch 비교까지, 깃 입문자도 바로 따라 할 수 있도록 하나씩 차근차근 설명합니다.

1. Git diff란 무엇인가?

git diff는 말 그대로 두 상태의 차이(diff, difference)를 보여주는 명령어입니다. “앞 상태”와 “지금 상태”가 어떻게 달라졌는지 줄 단위로 비교해서 보여줍니다.

보통 다음 세 가지 종류의 상태를 비교합니다.

  • 현재 작업 중인 파일 (워킹 디렉토리)
  • git add로 올려 둔 영역 (스테이지 / index)
  • 저장된 스냅샷들 (커밋) 또는 브랜치
기억하기:
Git diff는 “명령어가 어렵다”기보다는
어떤 상태와 어떤 상태를 비교하는가만 이해하면 됩니다.

2. 가장 기본적인 Git diff — “지금 수정한 내용 보기”

👉 스테이지에 올리지 않은 수정 내용 확인

git diff

비교 대상

  • 워킹 디렉토리 vs 스테이지(index)

즉, “파일을 수정했는데 아직 git add는 안 한 부분”이 어떤 차이가 있는지 보여줍니다.

예를 들어:

  • a.py를 수정만 하고 git diff 실행 → 변경된 줄이 표시됨
  • git add a.py를 한 뒤 git diff 실행 → 더 이상 안 보임 (스테이지로 올라가서)

3. 스테이지에 올린 내용의 변경 확인

한 번 git add를 하면, 그 변경은 이미 “스테이지”로 올라갔기 때문에 그냥 git diff만 치면 보이지 않습니다. 이때는 다음 명령을 사용합니다.

👉 스테이지에 올린 변경 내용 확인

git diff --staged

또는 동일한 명령:

git diff --cached

비교 대상

  • 스테이지(index) vs 마지막 커밋

즉, “지금 커밋하면 어떤 내용이 들어가는지”를 확인할 때 쓰는 명령입니다. 커밋하기 전에 반드시 한 번 확인하는 습관을 들이면 좋아요.

4. 특정 파일만 비교하기

수정된 파일이 여러 개 있으면, 특정 파일만 골라서 diff를 보고 싶을 때도 있습니다. 이럴 땐 파일 이름을 뒤에 붙여 주면 됩니다.

git diff a.py

스테이지에 올라간 내용 중 특정 파일만 보려면 이렇게:

git diff --staged a.py

5. Git diff commit — 커밋끼리 비교하기

이번에는 “지금 수정 중인 내용”이 아니라, 저장된 커밋들끼리 비교하는 방법입니다. 특정 시점 두 개를 찍어서 “이 사이에 뭐가 달라졌지?”를 보는 용도죠.

기본 형식은 다음과 같습니다.

git diff <commit1> <commit2>

예시:

git diff 1234abcd 7890efgh

비교 대상

  • commit1commit2의 코드 차이

✔️ 직전 커밋과 비교

“바로 이전 커밋과 지금 HEAD를 비교하고 싶다”면:

git diff HEAD~1 HEAD

또는 조금 더 짧게:

git diff HEAD~1

인자를 하나만 쓰면 HEAD~1과 현재 워킹 디렉토리 상태를 기준으로 비교하지만, 보통은 “직전 커밋 vs 현재 상태”를 보는 느낌으로 사용합니다.

✔️ 특정 커밋과 현재 작업 상태 비교

어떤 특정 커밋과 지금 상태를 비교하고 싶다면:

git diff <commit> HEAD

예를 들어 “배포했던 버전 커밋”과 지금 로컬 브랜치를 비교하는 식으로 많이 사용합니다.

6. Git diff branch — 브랜치끼리 비교하기

실제 협업에서는 브랜치를 여러 개 쓰게 됩니다. 이때 “main과 내 브랜치가 얼마나 다른지”를 보고 싶을 때가 많죠.

브랜치 간 비교의 기본 형식은 다음과 같습니다.

git diff branch1 branch2

예시:

git diff main feature/login

확인할 수 있는 것:

  • 각 브랜치의 HEAD 기준으로 어떤 파일이 추가 / 삭제 / 수정되었는지
  • PR 생성 전에 “무엇이 얼마나 바뀌었는지”를 한 번에 확인

원격 브랜치와 비교하는 것도 가능합니다.

git diff origin/main develop

→ 원격 main과 로컬 develop 브랜치의 차이 비교

7. Git diff에서 자주 쓰는 옵션

✔️ 변경된 파일 목록만 보고 싶을 때

git diff --name-only

“내용까지는 필요 없고, 어떤 파일이 바뀌었는지만 알고 싶다”는 경우에 사용합니다.

✔️ 줄 번호까지 보기

git diff --unified

줄 번호와 함께 더 넉넉한 컨텍스트를 보고 싶을 때 사용할 수 있는 옵션입니다.

✔️ 단어 단위로 비교

git diff --word-diff

보통은 줄 단위로 diff를 보여주는데, 이 옵션을 쓰면 줄 안에서 어느 단어가 바뀌었는지 좀 더 세밀하게 확인할 수 있습니다.

✔️ 색깔 강조 출력 (컬러 diff)

대부분의 Git은 기본적으로 컬러 diff를 켜두지만, 혹시 색상이 안 나올 때는 아래처럼 설정할 수 있습니다.

git config --global color.ui auto

8. Git diff 시각적으로 보기 (GUI 도구)

터미널이 아직 어색하거나, 복잡한 변경 사항을 눈으로 한 번에 보고 싶다면 GUI 도구를 함께 사용하는 것도 방법입니다.

기본적으로 Git에는 difftool이라는 기능이 있습니다.

git difftool

VSCode를 사용한다면 직접 파일 두 개를 비교할 수도 있습니다.

code --diff file1 file2

그 외에도 다음과 같은 GUI 클라이언트들이 많이 사용됩니다.

  • GitKraken
  • SourceTree
  • Fork, Git Extensions 등
팁:
터미널 기반 diff에 익숙해지면 가장 강력하지만,
초반에는 GUI 도구와 함께 병행해서 보는 것도 충분히 괜찮은 학습 방법입니다.

9. 한눈에 보는 요약

목적 명령어 설명
수정된 내용 확인 git diff 워킹 디렉토리 ↔ 스테이지 차이
스테이지 내용 확인 git diff --staged 스테이지 ↔ 마지막 커밋
특정 파일만 보기 git diff a.py 지정한 파일의 변경점만 확인
커밋끼리 비교 git diff A B 커밋 A와 B 사이의 차이
브랜치끼리 비교 git diff main develop 브랜치 간 코드 차이 확인
파일 목록만 보기 git diff --name-only 어떤 파일이 바뀌었는지만 확인

🔚 마무리

git diff는 Git을 쓸 때 거의 필수적으로 익혀야 하는 명령이지만, 사실 “어떤 상태와 어떤 상태를 비교하느냐”만 이해하면 매우 단순합니다.

처음에는 아래 세 개만 기억해도 충분합니다.

  1. git diff → 수정했지만 add 안 한 내용 보기
  2. git diff --stagedadd 후 커밋 전 상태 확인
  3. git diff commit1 commit2 / git diff branch1 branch2 → 커밋·브랜치 비교

이 세 가지만 손에 익으면, 나머지 diff 응용들은 자연스럽게 따라올 거예요.