코딩해보니/Git

[Git_25] diff 명령어로 비교 확인하기

위시랜 2022. 12. 24. 09:38

Git영역 비교하기 - diff 명령어
Git영역 비교하기 - diff 명령어

diff 명령어

이전 포스팅에서 git diff HEAD와 git diff에 대해 잠시 언급을 했습니다.

diff 명령어는 커밋이나 브랜치 사이에 다른 점 또는 수정 이력을 비교해 볼 때 사용할 수 있습니다.

 

먼저 $ git diff 에 대해 알아보겠습니다.

git diff는 워킹 디렉토리와 스테이지 간 차이를 확인하는 것이며 다음과 같이 사용합니다.

# 워킹 디렉토리와 스테이지 비교
$ git diff

 

그림으로 나타내면 다음과 같다고 할 수 있습니다.

워킹 디렉토리와 스테이지의 차이를 확인
워킹 디렉토리와 스테이지의 차이를 확인

 

가령, filea.html 파일을 수정하고 스테이지에 올린 상태라면,

이 상태는 워킹 디렉토리와 스테이지에 있는 filea.html의 내용은 같아집니다.

이때, 다음과 같이 git diff를 해 보면 아무런 내용이 없습니다.

차이가 없기 때문입니다.

스테이지에 파일을 올린 후 diff로 차이를 확인
스테이지에 파일을 올린 후 diff로 차이를 확인

 

스테이지에 올라가 있는 상태에서 filea.html을 수정하게 되면 차이가 발생합니다.
실제 이와 같은 상황은 git status 로 확인하면 다음과 같습니다.

차이가 발생한 Git 상태
차이가 발생한 Git 상태

스테이지(초록색 글씨)에도 수정되어 올라가 있고,

워킹 디렉토리(빨간색 글씨)에도 수정되어 있음을 알 수 있습니다.


이러한 상태를 소스트리에서 확인하면

다음과 같이 스테이지에 올라간 파일 영역에도

스테이지에 올라가지 않은 파일 영역에도 존재하게 됩니다.

소스트리(Sourcetree)에서 워킹디렉토리와 스테이지의 차이 확인
소스트리(Sourcetree)에서 워킹디렉토리와 스테이지의 차이 확인

 


diff 명령어 활용법 알아보기

예를 들어, Git의 각 영역(워킹디렉토리, 스테이지, 저장소)에서

filea.html 파일의 내용이 다음과 같다고 합시다.

 

이 내용을 토대로 실제 실행 화면을 통해 diff 명령어의 활용 방법을 확인해 보겠습니다.

Git 영역별 filea.html 파일의 내용
Git 영역별 filea.html 파일의 내용

 

워킹디렉터리와 스테이지간의 차이 확인

이런 경우 $ git diff로 확인해 보면 다음과 같이 차이점을 출력합니다.

git diff로 워킹디렉토리와 스테이지의 차이 확인
git diff로 워킹디렉토리와 스테이지의 차이 확인

 

워킹디렉터리와 커밋 HEAD 간의 차이 확인

다음으로 $ git diff HEAD 에 대해 알아보겠습니다.
$ git diff HEAD는 워킹 디렉터리의 내용과 커밋 HEAD의 차이점을 보여줍니다.

# 워킹 디렉토리의 내용과 커밋 HEAD의 차이점 확인
$ git diff HEAD

 

그림으로 나타내면 다음과 같다고 할 수 있습니다.

워킹디렉토리와 커밋 HEAD의 차이를 확인
워킹디렉토리와 커밋 HEAD의 차이를 확인

 

$ git diff HEAD를 실행한 실제 화면은 다음과 같습니다.

git diff HEAD 실행 화면
git diff HEAD 실행 화면


스테이지의 내용과 저장소의 커밋 HEAD의 차이 확인

또, 스테이지의 내용과 저장소의 커밋 HEAD의 차이도 확인할 수 있습니다.

스테이지와 커밋 HEAD의 차이를 확인

 

$ git diff --staged를 실행한 실제 화면은 다음과 같습니다.

git diff --staged 실행 화면
git diff --staged 실행 화면


특정 파일에 대한 차이 확인

지금까지 diff 명령어를 사용해 본 것은

저장소에 filea.html 파일 하나만 있기 때문에 간략하게 확인이 가능했습니다.

 

하지만, 실제 개발을 할 경우에는

여러 개의 파일을 작업하게 되는데,

특정 파일에 대한 변경 사항만 확인하고 싶은 경우가 있습니다.
이럴 경우, 다음과 같이 사용합니다.

# 특정 파일에 대한 변경 사항 확인
$ git diff [옵션] [파일명]

예를 들어, filea.html 파일을 스테이지와 저장소의 커밋 HEAD 간의 차이를 확인하고 싶은 경우

$ git diff --staged filea.html이라고 하면 됩니다.


브랜치와 브랜치, 커밋 간 차이 확인

또한 브랜치와 브랜치간의 변경 사항도 확인할 수 있습니다.

브랜치에 대해서는 아직 설명하지 않았습니다만, 알아 두면 좋겠습니다.

# 브랜치 간의 변경 사항 확인
$ git diff [브랜치1]..[브랜치2] 

# 또는
$ git diff [브랜치1] [브랜치2]

 

이러한 방식으로 커밋간 변경 사항 확인도 가능합니다.

# 커밋 간의 변경 사항 확인
$ git diff [커밋ID]..[커밋ID]

# 또는
$ git diff [커밋ID] [커밋ID]

 

이상과 같이 diff 명령어를 통해 Git의 영역 간, 파일 간 차이를 쉽게 파악할 수 있음을 알 수 있습니다.

 

감사합니다.