[Git] 깃 diff

깃 diff에 대하여 알아보자


소개

git diff는 Git에서 변경 사항을 확인하는 데 사용하는 명령어이다. 이 명령어는 직접적으로 Git 저장소에 영향을 주지 않고, 단순히 변경된 내용에 대한 정보만 제공한다. 변경 사항을 커밋하기 전에 어떤 내용이 변경되었는지 확인하거나, 서로 다른 커밋, 브랜치 간의 차이를 비교할 때 유용하다.


Git Diff 출력 해석하기

git diff 명령어를 실행하면 다음과 같은 형식의 출력을 볼 수 있다:

diff --git a/abc.txt b/abc.txt
index 015e433..9ce8efb 100644
--- a/abc.txt
+++ b/abc.txt
@@ -2,8 +2,7 @@ aaa
 bbb
 ccc
 ddd
-kkk
+eee
 fff
 ggg
 hhh
-iii

이 출력의 각 부분을 해석해보자:

  1. 비교 대상 파일: diff --git a/abc.txt b/abc.txt

    • 첫 줄은 비교 대상이 되는 두 파일을 나타낸다. a는 변경 전 파일, b는 변경 후 파일이다.
  2. 파일 메타데이터: index 015e433..9ce8efb 100644

    • 이 줄은 파일의 메타데이터를 포함하며, 주로 내부적으로 사용되는 정보이다.
  3. 파일 표시: --- a/abc.txt+++ b/abc.txt

    • 변경 전 파일(---)과 변경 후 파일(+++)을 구분한다.
  4. 변경 위치 정보: @@ -2,8 +2,7 @@ aaa

    • @@ -2,8 +2,7 @@는 변경된 부분의 위치를 나타낸다.
    • -2,8은 원본 파일에서 2번 라인부터 8줄을 의미한다.
    • +2,7은 수정된 파일에서 2번 라인부터 7줄을 의미한다.
    • aaa는 해당 섹션의 시작 부분에 있는 내용의 일부를 미리 보여준다.
  5. 변경 내용:

    • 공백으로 시작하는 줄은 양쪽 파일에서 동일한 내용이다.
    • -로 시작하는 줄은 원본 파일에는 있지만 수정된 파일에서 제거된 내용이다.
    • +로 시작하는 줄은 원본 파일에는 없지만 수정된 파일에 추가된 내용이다.

위 예시에서는 kkkeee로 변경되었고, iii 줄이 삭제된 것을 확인할 수 있다.


다양한 Git Diff 명령어

Git에서는 다양한 상황에서 변경 사항을 비교할 수 있는 여러 형태의 diff 명령어를 제공한다.

기본 명령어

명령어비교 대상설명
git diff작업 디렉토리 ↔ 인덱스아직 git add 하지 않은 변경 사항을 확인
git diff HEAD작업 디렉토리 ↔ 최신 커밋 (HEAD)현재 브랜치의 최신 커밋과 비교하여 변경 사항을 확인
git diff --staged 또는 git diff --cached인덱스 ↔ 최신 커밋 (HEAD)git add로 스테이징한 변경 사항과 최신 커밋의 차이를 확인

여기서 인덱스는 스테이징 영역을 의미한다.

특정 파일 비교

특정 파일에 대한 변경 사항만 확인하고 싶다면 파일 경로를 지정하면 된다:

$ git diff HEAD <filename>     # 최신 커밋과 작업 디렉토리의 특정 파일 비교
$ git diff --staged <filename> # 최신 커밋과 스테이징된 특정 파일 비교

브랜치 및 커밋 간 비교

서로 다른 브랜치나 커밋 간의 차이를 비교할 수도 있다:

$ git diff branch1..branch2    # branch1과 branch2 사이의 차이 비교
$ git diff commit1..commit2    # commit1과 commit2 사이의 차이 비교

예를 들어, main 브랜치와 feature 브랜치를 비교하려면:

$ git diff main..feature

또는 특정 커밋 간의 차이를 확인하려면:

$ git diff abc123..def456

추가 옵션

Git diff에는 다양한 추가 옵션이 있다:

  • --stat: 변경된 파일의 통계 정보만 표시

    $ git diff --stat
  • --name-only: 변경된 파일 이름만 표시

    $ git diff --name-only
  • --color-words: 단어 단위로 차이를 색상으로 표시

    $ git diff --color-words

Git Diff 활용 시나리오

1. 작업 중인 변경 사항 확인

개발 중에 어떤 내용을 변경했는지 확인하고 싶을 때:

$ git diff

2. 커밋 전 최종 검토

변경 사항을 스테이징한 후, 커밋하기 전에 최종 검토:

$ git diff --staged

3. 특정 파일의 변경 이력 추적

특정 파일이 두 커밋 사이에 어떻게 변경되었는지 확인:

$ git diff abc123..def456 path/to/file

4. 브랜치 병합 전 차이점 확인

브랜치를 병합하기 전에 어떤 변경 사항이 병합될지 미리 확인:

$ git diff main..feature

결론

git diff는 Git을 사용하는 개발자에게 필수적인 명령어이다. 변경 사항을 커밋하기 전에 검토하거나, 서로 다른 브랜치나 커밋 간의 차이를 비교할 때 유용하게 사용할 수 있다. 다양한 옵션을 통해 원하는 형태로 변경 사항을 확인할 수 있어, 효율적인 코드 관리와 협업에 큰 도움이 된다.

Git diff를 잘 활용하면 실수로 인한 버그를 줄이고, 코드 품질을 향상시킬 수 있다. 특히 코드 리뷰나 변경 사항을 다른 개발자에게 설명할 때 큰 도움이 된다.