git diff 란?
git의 diff란 commit 이나 branch 사이에 다른점 혹은 파일이나 Repository와 Working Directory 사이의 다른점을 보여주는 명령어이다. 이에 따라 git diff에는 다양한 옵션이 있다.
이 글에서는 다음의 순서로 진행한다.
- git diff와 git diff HEAD 를 이용한 변경 사항 확인
- git diff [option] [file name] 사용해 특정한 파일에 대한 변경 사항 확인하기
- git diff [branch1]..[branch2] 명령어 사용해 브랜치 간 변경사항 확인하기
git diff와 git diff HEAD 를 이용한 변경 사항 확인
먼저 git diff와 git diff HEAD에 대해 알아보자. git diff는 Working Directory와 Staging Area 사이의 차이를 확인하기 위한 명령어이며, git diff HEAD는 현재 작업 중인 내용이 Repository의 HEAD commit과 다른 점을 총체적으로 보여주기 위한 명령어이다.
- git diff : Working Directory와 Staging Area 사이의 차이 확인
- git diff HEAD : Working Directory HEAD Commit에 대한 Change확인
git diff : Working Directory와 Staging Area 사이의 차이 확인
git diff는 Working Directory와 Staging Area 사이의 차이를 확인하기 위해 사용된다. 여기서 주의할 점은 변경 사항이 git add를 통해 Staging Area 로 넘어갔으면 git diff에는 아무것도 나타나지 않는다는 점이다.
git diff
git diff 예시
예를 들어 다음과 같은 파일이 repository에 올라갔다고 해보자.
만약 이 파일에 다음과 같이 kotlinworld.com이라는 한 줄을 추가하게 되면
git diff를 수행했을 때 다음과 같은 결과가 나온다.
위 내용은 복잡해보이지만 각 줄은 다음과 같은 의미를 가진다.
diff --git a/kotlinworld.txt b/kotlinworld.txt // 두 파일 사이의 다른 점을 출력
index 6a074f6..1644d10 100644 // 파일의 고유 번호(의미 없음)
--- a/kotlinworld.txt // --- a : 원래 파일
+++ b/kotlinworld.txt // +++ b : 바뀐 파일
@@ -1 +1,2 @@ // 원래파일(-) 1번째줄 부터 보여주는데 바뀐 파일(+)은 1번째 줄을 기준으로 2번째 줄에서 바뀜
hello kotlinworld
+kotlinworld.com // +++ b에 해당하는 파일에서 바뀐 내용
만약 하지만 만약 위 파일을 git add 옵션을 통해 Staging Area로 올린 다음 git diff를 통해 확인하면 아무것도 나오지 않는다. git diff는 Working Directory와 Staging Area 사이의 차이를 보여주는데, Staging Area에 변경 사항이 올라가버렸기 때문이다.
git diff HEAD : Working Directory HEAD Commit에 대한 Change확인
git diff HEAD는 Working Directory와 Staging Area의 변경사항 모두를 Repository의 HEAD 커밋과 비교한다.
git diff HEAD
Staging Area에 올라간 내용은 물론 현재 작업중인 내용 모두가 Repository의 HEAD 커밋과 비교된다.
위 그림6 에서 Staging Area로 올라가 안보였던 변경사항은 git diff HEAD를 이용하면 보이게 된다.
git diff --staged 를 이용한 Staging Area와 Repository HEAD 커밋 사이의 변경 사항 확인
git diff --staged는 Staging Area와 Repository HEAD 커밋 사이의 변경 사항을 확인하기 위해 사용된다. 커밋을 하기 전에 사용되는 명령어로 사실상 git diff 중 가장 많이 사용되는 명령어이다.
*git diff --staged는 git diff --cached와 같은 역할을 한다.
git diff --staged
이 명령어를 사용하면 Staging Area에 올라간 Change만 Repository의 HEAD 커밋과 비교되며, 현재 작업중인 내용들 중 git add 되지 않은 변경사항은 보여지지 않는다.
git diff [option] [file name] 사용해 특정한 파일에 대한 변경 사항 확인하기
위에서 우리가 배운 git diff HEAD, git diff --staged에 관한 내용들은 git diff에 대한 옵션이다. 이 옵션을 포함하거나 포함하지 않고 특정한 파일에 대한 변경사항만 확인하고 싶다면 다음의 명령어를 사용하면 된다.
git diff [option] [file name]
예를 들어 --staged 옵션을 이용해 Staging Area와 Repository의 HEAD 커밋 사이의 변경 사항을 확인하는데 그 중 kotlinworld.txt에 대한 변경 사항만 확인하고 싶다면 다음 명령어를 사용하면 된다.
git diff --staged kotlinworld.txt
만약 아무런 옵션을 포함하지 않고 kotlinworld.txt 에 대한 git diff를 확인하고 싶다면 다음 명령어를 사용하면 된다.
git diff kotlinworld.txt
git diff [branch1]..[branch2] 명령어 사용해 브랜치 간 변경사항 확인하기
브랜치간 변경사항을 확인하고 싶다면 다음 명령어 중 하나를 사용하면 된다.
git diff [branch1]..[branch2]
git diff [branch1] [branch2]
예를 들어 main 브랜치와 feature-view 브랜치 사이의 변경사항을 확인하고 싶다면 다음 명령어를 사용하면 된다.
git diff main..feature-view
git diff [commit1]..[commit2] 사용해 커밋간 변경 사항 확인하기
커밋간 변경사항을 확인하고 싶다면 다음 명령어를 사용하면 된다.
git diff [commit hash1]..[commit hash2]
예를 들어 다음과 같이 사용 가능하다.
*커밋 해시는 git log --oneline 명령어를 사용해 확인 가능하다. 맨왼쪽의 값이 커밋 해시이다.