글 작성자: juyoungit

git diff

파일의 변경된 내용을 확인 (Working Directory <-> Staging Area)

git diff 명령을 사용하게 되면 Working Directory와 Staging Area 사이에서 변경된 내용을 출력해준다. 즉, Staging Area에 특정 소스파일을 등록한 이후에 Working Directory에서 해당 소스파일의 내용이 변경된 경우 기존에 Staging Area에 등록했던 소스파일과 비교해서 어떤 부분의 내용이 변경되었는 지를 확인하는 용도로 확인할 수 있다.

 

우선, Working Directory에 아래와 같은 내용의 소스 파일 "addition.c"을 생성하고 이를 git add 명령어를 통해서 Staging Area에 등록해보도록 하겠다.

addition.c 파일의 내용
생성한 addition.c 파일을 add

그리고 나서 다시 Working Directory에 있는 addition.c 파일의 내용을 아래와 같이 변경해보도록 하겠다. (기존의 addition.c 소스는 코드 상에 더할 정수를 지정했었지만, 변경한 내용의 코드는 사용자로부터 입력을 받도록 코드가 변경되었다.)

addition.c 소스를 수정한 모습 (정수 입력파트)

해당 파일을 저장하고 나서 git status를 입력하면 아래와 같이 이전에 Staging Area에 add하고 나서 commit 하지 않은 이전 버전의 addition.c가 new 파일 상태로, 이전 과정에서 소스를 수정한 addition.c 파일이 modified 상태로 나타나고 있는 것을 확인할 수 있다.

이 상태에서 git diff 명령어를 입력하면 아래와 같이 Staging Area에 add 되어 있는 소스파일 addition.c 파일의 내용을 기준으로 Working Directory에 있는 addition.c 파일의 소스가 어떤 부분이 변경되었는 지를 보여준다. 두 버전을 서로 다른 색상으로 구분하여 보여주기 때문에 각 버전을 쉽게 구분할 수 있다.

즉, git diff 명령어를 이용하면 Working Directory와 Staging Area 사이의 등록된 내용의 차이를 비교해볼 수 있다는 것을 알 수 있다. 그렇다면 이미 commit되어 Git Directory(= Repository)에 존재하는 소스파일과 Staging Area에 존재하는 소스의 내용을 서로 비교할 수는 없을까? 물론 가능하다. 이를 수행하기 위해서는 staged, cached 옵션을 사용한다.

 

git diff --staged & git diff --cached

파일의 변경된 내용을 확인 (Staging Area <-> Git Repository)

즉, 아래와 같이 이전 과정에서 Staging Area에 있던 addition.c 파일을 commit하고, Working Directory에서 내용을 변경한 addition.c 파일을 Staging Area에 등록하고나서

아래와 같이 staged 옵션을 사용해서 git diff 명령을 입력하면 아래와 같이 동일하게 Git Repository의 파일을 기준으로 Staging Area에 add 되어있는 소스 파일의 내용이 어떻게 변경되었는 지를 확인할 수 있다.

표현은 다르지만 cached 옵션도 staged 옵션과 동일한 결과를 보여준다.

이처럼 git diff 명령을 사용하면 현재 내가 Working Directory에서 수정한 내용의 소스파일이 이전에 add해 둔 파일과 비교해서 어떤 부분을 변경하거나 삭제/추가 했는 지를 확인하는 데 아주 유용하게 활용할 수 있다.

'Tools > Git, Github' 카테고리의 다른 글

git rm - 파일 삭제하기  (0) 2021.01.12
git commit - 변경사항 commit 하기  (0) 2021.01.11
git log - commit 기록 조회하기  (0) 2021.01.09
git status, add, reset, commit  (0) 2021.01.08
Git 관련 명령어 - git init / git clone  (0) 2021.01.07