파일 변경 내용을 git 명령어로도 볼 수도 있지만, 사실 상용제품이 한 눈에 비교가능한 좋은 인터페이스를 제공한다 ㅎㅎ...
Git 파일의 변경 내용 보기 : $ git diff
(=Staged와 Unstaged 상태의 변경 내용을 보기)
- stage되어 커밋가능한 상태의 파일의 수정내용을 확인할 떄 $ git diff 명령어를 사용한다.
- $ git status vs $ git diff 차이
$ git status | 파일이 변경됐다는 사실(파일상태) 확인 |
$ git diff | 파일의 어떤 내용이 변경됐는지 확인 |
$ git diff 명령어
1. Working Directory의 파일과 Staging Area의 파일 비교 : $ git diff
ㄴ> 수정했지만 아직 staged 상태가 아닌 파일이 비교대상 (Unstaged 상태인 변경 부분을 확인)
ㄴ> Patch처럼 어떤 라인을 추가했고 삭제했는지가 궁금할 때 사용
ㄴ> ※ git diff 명령은 마지막으로 커밋한 후에 수정한 것들 전부를 보여주지 않는다. git diff 는 Unstaged 상태인 것들만 보여준다.
수정한 파일을 모두 Staging Area에 넣었다면 git diff 명령은 아무것도 출력하지 않는다.
+) git diff 대신 git difftool 명령을 사용해서 emerge, vimdiff 같은 도구로 비교할 수 있다. 상용 제품도 사용할 수 있다.
Ex1~5) Staged에 올린 파일을 내용 (삭제/추가/수정/삭제&추가&수정/수정없음)한 파일과 비교하기
(사이트 예제가 이해안가서 만들어 비교했습니다.. -ㅠ- )
ⓐ Stageing Area에 있는 Staged상태인 'GitDiffTest.txt 파일'이 있다고 가정하자
GitDiffTest.txt 내용 | >git status On branch ch10-java Changes to be committed: (use "git reset HEAD <file>..." to unstage) new file: GitDiffTest.txt |
line01 line02 line03 line04 line05 line06 line07 line08 line09 line10 |
Ex1) 기존 내용 삭제 후 $ git diff 실행
ㄴ> GitDiffTest.txt 에서 2,3, 8,9행 삭제 후, git diff 명령어 실행
실제라인 | 수정전 | 실제라인 | 수정후 | >git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..108ce33 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt @@ -1,10 +1,6 @@ line01 -line02 -line03 line04 line05 line06 line07 -line08 -line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line02 line03 line04 line05 line06 line07 line08 line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line04 line05 line06 line07 line10 |
|
▼ $git diff 결과 메시지 분석 | ||||
>git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory // ▼ diff 비교를 위해 입력된 두 소스 표시 diff --git a/GitDiffTest.txt b/GitDiffTest.txt // 이 예제 경우 'a/GitDiffTest.txt'파일은 수정 전 파일이고, 'b/GitDiffTest.txt'파일은 수정 후 파일입니다. index 24a84db..108ce33 100644 // 두 파일의 git객체 버전 해시 식별자 (git 내부적 메타데이터 표시로 딱히 필요는 없을듯) // ▼ 비교 소스코드 표시마커를 알려준다. --- a/GitDiffTest.txt // 'a/GitDiffTest.txt'파일은 ---로 표시할 거란 의미 +++ b/GitDiffTest.txt // 'b/GitDiffTest.txt'파일은 +++로 표시할 거란 의미 // ▼ 'Diff chunks'라고 부르는데 chunk 기준은 모르겠으나, 실제 달라진 diff 부분을 보여주기 위해서 몇 라인 가져왔는지 @@ -1,10 +1,6 @@ // "-1,10" 의 의미는 '-'로 표시한 수정 전 파일은 1라인부터 10개 라인을 가져와 보여줬다는 의미 (ⓑ번 표의 실제라인 참조) // "+1,6" 의 의미는 '+'로 표시한 수정 후 파일은 1라인부터 6개 라인을 가져와 보여줬다는 의미 (ⓑ번 표의 실제라인 참조) // ▼ 실제 달라진 diff 부분 표시 line01 -line02 // ◀ '-'는 수정 전 'a/GitDiffTest.txt'파일 표시마커이고, 이 파일의 변경사항을 보여준다. -line03 line04 line05 line06 line07 -line08 -line09 line10 // ▲ 기존 파일 내용을 제거만 했으므로 수정 후 파일의 표시사항('+'기호)은 없다. |
Ex2) 기존 내용 추가 후 $ git diff 실행
ㄴ> GitDiffTest.txt 에서 중간에 3개행 추가 후, git diff 명령어 실행
실제라인 | 수정전 | 실제라인 | 수정후 | >git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..f2a03fa 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt @@ -3,6 +3,9 @@ line02 line03 line04 line05 +line05+1 +line05+2 +line05+3 line06 line07 line08 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
line01 line02 line03 line04 line05 line06 line07 line08 line09 line10 |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
line01 line02 line03 line04 line05 line05+1 line05+2 line05+3 line06 line07 line08 line09 line10 |
|
▼ $git diff 결과 메시지 분석 | ||||
>git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory // ▼ Ex1의 ⓒ '결과 메시지 분석' 설명 참조 diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..f2a03fa 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt // ▼ diff 부분을 보여주기 위해서 몇 라인 가져왔는지 // "-3,6" : '-' 표시 파일(a/GitDiffTest.txt) 3라인부터 6개 라인을 가져와 보여줬다는 의미 (ⓑ번 표의 실제라인 참조) // "+3,9" :'+'표시 파일(b/GitDiffTest.txt) 3라인부터 9개 라인을 가져와 보여줬다는 의미 (ⓑ번 표의 실제라인 참조) @@ -3,6 +3,9 @@ line02 // << "line02"는 왜 여기서부터 붙었는지 모르겠다;;;;; line03 line04 line05 +line05+1 // ◀ '+'는 수정 파일인 'b/GitDiffTest.txt'파일 표시마커이고, 이 파일의 변경사항을 보여준다. +line05+2 +line05+3 line06 line07 line08 // ▲ 현재 파일에 추가만 했으므로 수정 전 파일의 표시사항('-'기호)은 없다. |
Ex3) 기존 내용 수정 후 $ git diff 실행
ㄴ> GitDiffTest.txt 에서 6-8행에서 '0'제거 후, git diff 명령어 실행
실제라인 | 수정전 | 실제라인 | 수정후 | >git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..df65f38 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt @@ -3,8 +3,8 @@ line02 line03 line04 line05 -line06 -line07 -line08 +line6 +line7 +line8 line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line02 line03 line04 line05 line06 line07 line08 line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line02 line03 line04 line05 line6 line7 line8 line09 line10 |
|
▼ $git diff 결과 메시지 분석 | ||||
>git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory // ▼ Ex1의 ⓒ '결과 메시지 분석' 설명 참조 diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..df65f38 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt //▼diff 부분을 보여주기 위해서3라인부터 8개 라인을 가져와보여줬다는 의미 (ⓑ번 표의 실제라인/실제라인 참조) @@ -3,8 +3,8 @@ line02 // << "line02"는 왜 여기서부터 붙었는지 모르겠다;;;;; line03 line04 line05 -line06 // ◀ '-'는 'a/GitDiffTest.txt'파일의 변경사항을 보여준다. -line07 -line08 +line6 // ◀ '+'는 'b/GitDiffTest.txt'파일의 변경사항을 보여준다. +line7 +line8 line09 line10 |
Ex4) 기존 내용 삭제&추가&수정 후 $ git diff 실행
ㄴ> GitDiffTest.txt 에서 (2,8라인 삭제) & (기존 5,7,11라인 자리에 새 내용 추가) & (4,6라인 내용 수정) 후, git diff 명령어 실행
실제라인 | 수정전 | 실제라인 | 수정후 | >git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..5c4e81b 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt @@ -1,10 +1,10 @@ line01 -line02 line03 -line04 +line04 + add comment +add new line05 line05 -line06 +line06 + add comment line07 -line08 +add new line07 line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line02 line03 line04 line05 line06 line07 line08 line09 line10 |
1 2 3 4 5 6 7 8 9 10 |
line01 line03 line04 + add comment add new line05 line05 line06 + add comment line07 add new line07 line09 line10 |
|
▼ $git diff 결과 메시지 분석 |
||||
> git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory // ▼ Ex1의 ⓒ '결과 메시지 분석' 설명 참조 diff --git a/GitDiffTest.txt b/GitDiffTest.txt index 24a84db..df65f38 100644 --- a/GitDiffTest.txt +++ b/GitDiffTest.txt @@ -1,10 +1,10 @@ line01 -line02 // ◀ '-'는 'a/GitDiffTest.txt'파일의 변경사항을 보여준다. line03 -line04 +line04 + add comment // ◀ '+'는 'b/GitDiffTest.txt'파일의 변경사항을 보여준다. +add new line05 line05 -line06 +line06 + add comment line07 -line08 +add new line07 line09 line10 |
Ex5) 변경 사항이 없을 때 $ git diff 명령어를 사용 : 아래와 같은 메시지를 보여준다.
>git diff warning: CRLF will be replaced by LF in GitDiffTest.txt. The file will have its original line endings in your working directory |
2. Staging Area의 파일과 Git Repository의 파일 비교 : $ git diff --staged 또는 $ git diff --cached
ㄴ> 저장소에 커밋한 것과 Staging Area에 있는 것을 비교 (Staged 상태인 파일 확인)
Ex2-2) 커밋된 적이 없어 Git Repository에 없고 Staging Area에 있는 GitDiffTest.txt 파일 비교
>git diff --staged diff --git a/GitDiffTest.txt b/GitDiffTest.txt new file mode 100644 index 0000000..24a84db --- /dev/null +++ b/GitDiffTest.txt @@ -0,0 +1,10 @@ +line01 +line02 +line03 +line04 +line05 +line06 +line07 +line08 +line09 +line10 |
3. $ git diff 명령어에 대해 더 많은 케이스 작성 블로그
https://engineer-mole.tistory.com/130
END!
스터디 도움 참조 블로그 (References)
- 버전 관리(VC) 위키백과 https://ko.wikipedia.org/wiki/%EB%B2%84%EC%A0%84_%EA%B4%80%EB%A6%AC - 누구나 쉽게 이해할 수 있는 Git 입문 https://backlog.com/git-tutorial/kr/ /입문편/Git의 기본/이력을 관리하는 저장소 https://backlog.com/git-tutorial/kr/intro/intro1_2.html - git--distributed-even-if-your-workflow-isnt (Pro Git Book) https://git-scm.com/book/en/v2 - git--distributed-even-if-your-workflow-isnt (Pro Git Book) / ch2.2 https://git-scm.com/book/ko/v2/Git%EC%9D%98-%EA%B8%B0%EC%B4%88-%EC%88%98%EC%A0%95%ED%95%98%EA%B3%A0-%EC%A0%80%EC%9E%A5%EC%86%8C%EC%97%90-%EC%A0%80%EC%9E%A5%ED%95%98%EA%B8%B0 - What does “@@ -1 +1 @@” mean in Git's diff output? https://stackoverflow.com/a/31615728 - git-diff 라인별 설명 https://www.atlassian.com/git/tutorials/saving-changes/git-diff |