git diff
명령어 설명
git의 세 가지 저장 공간 간 (작업 디렉터리 - 스테이지 영역 - 깃 저장소) 의 차이를 비교하는 명령이다.
-두 파일이 같으면 출력 결과에 아무 것도 표시되지 않는다.
-두 파일이 다르면 출력 결과에 차이 사항이 표시된다.
기본 사용법과 출력 해석
1
git diff [option]
옵션
옵션 | full name | 설명 |
---|---|---|
없음 | 작업 디렉터리와 스테이지 영역 간의 차이 확인 -> 스테이지 영역에 올라가지 않은 변경 사항이 출력된다. |
|
--staged or --cached --staged HEAD --cached HEAD |
스테이지 영역과 마지막 커밋 간의 차이 확인 | |
HEAD |
작업 디렉터리와 마지막 커밋 간의 차이 확인 | |
HEAD HEAD~ |
현재 커밋과 직전 커밋 간의 차이 확인 | |
<file name> |
특정 파일에 대한 변경 내용 확인 | |
<commit1> <commit2> |
두 특정 커밋 간의 차이 비교 | |
<branch1> <branch2> |
두 특정 브랜치 간의 차이 비교 |
출력 해석
1
2
3
4
5
6
7
diff --git a/example.txt b/example.txt
index 83db48f..e2c4e60 100644
--- a/example.txt
+++ b/example.txt
@@ -1,4 +1,4 @@
- Hello World!
+ Hello Git!
항목 | 해석 |
---|---|
diff –git a/example.txt b/example.txt | - 두 파일 a/example.txt b/example.txt 를 비교하고 있다. - git은 변경 전 파일을 a/ 변경 후 파일을 b/ 로 표시한다. |
index 83db48f..e2c4e60 100644 | - 비교하는 변경 전후 두 파일의 commit ID 값이다.- 100644 는 파일 권한으로, 일반적인 읽기-쓰기 가능을 의미한다. (리눅스의 644 mode와 동일 ) |
— a/example.txt | 변경 전 파일의 경로로, --- 는 이전 파일 을 나타낸다. |
+++ b/example.txt | 변경 후 파일의 경로로, +++ 는 이후 파일 을 나타낸다. |
@@ -1,4 +1,4 @@ | 변경된 코드 영역의 문맥(context) 정보이다.-1,4 : 변경 전 파일의 코드 영역이 1번 줄부터 4줄이 포함된 영역임을 뜻한다.+1,4 : 변경 후 파일의 코드 영역이 1번 줄부터 4줄이 포함된 영역임을 뜻한다.@@ 는 변경 영역의 시작을 나타낸다. |
- Hello World! | 변경 전 파일에 있던 내용을 뜻한다.- 는 삭제된 내용을 뜻한다. |
+ Hello Git! | 변경 후 파일에 있는 내용을 뜻한다.+ 는 추가된 내용을 뜻한다. |
예시
예시 깃 저장소
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 첫 번째 커밋 : 파일 생성
echo '#!/bin/bash' > test.sh
git add ./test.sh
git commit -m "first commit"
# 두 번째 커밋 : 파일 수정
echo "echo Hello Linux" >> test.sh
git commit -am "second commit"
# 세 번째 커밋 : 파일 수정
echo 'echo $0 $1 $2' >> test.sh
git commit -am "third commit"
# 네 번째 커밋 : 새로운 브랜치를 생성 + HEAD 이동 + 파일 수정
git checkout HEAD~
git checkout main
git checkout HEAD~1
git checkout -b new_branch
echo "another branch" >> ./test.sh
git commit -am "4th commit at new branch"
1
2
3
4
5
6
7
8
9
# 다시 main 브랜치로 이동
git checkout main
# 추가로 파일을 수정하고 스테이지 영역으로 올림
echo "diff test" >> test.sh
git add ./test.sh
# 추가로 파일을 수정
echo "diff test - unstaged" >> test.sh
(1) 옵션 없음 : 스테이지 영역에 올라가지 않은 변경 사항 확인
1
2
3
4
5
6
7
8
9
10
11
12
# (1) 옵션 없음 : 스테이지 영역에 올라가지 않은 변경 사항 확인
git diff
>> diff --git a/test.sh b/test.sh
>> index 3889052..4d7d02a 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -2,3 +2,4 @@
>> echo Hello Linux
>> echo $0 $1 $2
>> diff test
>> +diff test - unstaged
(2) cached, staged : 스테이지 영역과 마지막 커밋 간 차이
1
2
3
4
5
6
7
8
9
10
11
12
13
# (2) cached, staged : 스테이지 영역과 마지막 커밋 간 차이
git diff --cached # git diff --staged 와 동일
>> diff --git a/test.sh b/test.sh
>> index 20c3a07..3889052 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -1,3 +1,4 @@
>> \#!/bin/bash
>> echo Hello Linux
>> echo $0 $1 $2
>> +diff test
(3) HEAD : 작업 디렉터리와 마지막 커밋 간의 차이 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
# (3) HEAD : 작업 디렉터리와 마지막 커밋 간의 차이 확인
git diff HEAD
>> diff --git a/test.sh b/test.sh
>> index 20c3a07..4d7d02a 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -1,3 +1,5 @@
>> \#!/bin/bash
>> echo Hello Linux
>> echo $0 $1 $2
>> +diff test
>> +diff test - unstaged
(4) HEAD HEAD~ : 현재 커밋과 직전 커밋 간의 차이 확인
1
2
3
4
5
6
7
8
9
10
# (4) HEAD HEAD~ : 현재 커밋과 직전 커밋 간의 차이 확인
git diff HEAD HEAD~
>> diff --git a/test.sh b/test.sh
>> index 20c3a07..29446b0 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -1,3 +1,2 @@
>> \#!/bin/bash
>> echo Hello Linux
>> -echo $0 $1 $2
(5) commit1 commit2 : 두 특정 커밋 간의 차이 비교
1
2
3
4
5
6
7
8
9
10
# (5) commit1 commit2 : 두 특정 커밋 간의 차이 비교
git diff 4130 37b9
>> diff --git a/test.sh b/test.sh
>> index 0bf81b3..a9bf588 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -1,3 +1 @@
>> \#!/bin/bash
>> -echo Hello Linux
>> -another branch
(6) branch1 branch2 : 두 특정 브랜치 간의 차이 비교
1
2
3
4
5
6
7
8
9
10
11
# (6) branch1 branch2 : 두 특정 브랜치 간의 차이 비교
git diff main new_branch
>> diff --git a/test.sh b/test.sh
>> index 20c3a07..0bf81b3 100644
>> --- a/test.sh
>> +++ b/test.sh
>> @@ -1,3 +1,3 @@
>> \#!/bin/bash
>> echo Hello Linux
>> -echo $0 $1 $2
>> +another branch