diff
지금까지 git status를 통해 파일의 변경 사항 등을 확인을 해 왔다. 하지만 git status의 경우, 단순히 파일이 어떻게 변경되었다는 사실만을 알 수 있는데, 만약 파일의 어떤 내용이 변경 되었는지 알고 싶기 위해서는 어떻게 해야 할까?
현재 파일이 staged 상태인지 unstaged(modified, untracked) 상태인지를 확인하기 위해서는 status 명령어만으로 충분하지만 해당 파일이 어떻게 변경되었는지 자세히 알아보기 위해서는 git diff 명령어를 사용하여야 한다.
해당 명령어를 사용하면 Patch 처럼 어떤 라인이 추가가 되고 삭제가 되었는지를 확인할 수 있다. 이를 위해서 파일 하나를 생성 후, staged 상태로 만든다음 그 파일을 다시 변경하여 보자.
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ echo "version1" > file1.txt
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git add file1.txt
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit -m "new file"
[master (root-commit) d3abd15] new file
1 file changed, 1 insertion(+)
create mode 100644 file1.txt
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ echo "version2" > file1.txt
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: file1.txt
no changes added to commit (use "git add" and/or "git commit -a")
file1.txt 는 untracked => staged => unmodified => modified 의 상태를 거쳐왔기 때문에 git status 명렁어를 사용하게 되면 위와 같이 modified : file1.txt 문구를 띄우게 된다.
이 때 해당 file1.txt 의 구체적으로 어떻게 변경되었는지 알아보기 위해선 git diff 명령어를 사용하면 된다.
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git diff
diff --git a/file1.txt b/file1.txt
index 5bdcfc1..df7af2c 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1 @@
-version1
+version2
git diff 명령어를 사용하게 되면, 워킹 디렉토리에 있는 파일(modified)과 staging area에 있는 파일(변경되기 전 staged 파일) 을 비교하여 그 결과를 보여주게 된다. 출력 결과를 분석해보자.
내용 | 설명 |
diff --git a/file1.txt b/file1.txt | 비교 대상에 해당하는 파일들을 출력 |
index 5bdcfc1..df7af2c 100644 | 해당 파일들의 index 값 (SHA-1 해시 값) |
--- a/file1.txt | 기존의 staging area에 있는 파일(unmodified 파일) |
+++ b/file1.txt | working directory에 있는 파일(modified 파일) |
@@ -1 +1 @@ | 원래의 파일(-) 의 첫번째 줄 부터 보여줌, 바뀐 파일(+)의 첫번째 줄이 바뀜 |
-version1 | 원본의 version1 부분이 없어지고 |
+version2 | version2 가 추가되었음을 의미 |
git diff --staged
위에서 사용한 git diff는 워킹 디렉토리에 있는 modified 파일과 staging area에 있는 staged 파일을 비교하는 명렁어이다. 그렇기 때문에 만약 변경된 파일을 add(staged 상태로 변경)하게 되면 git diff를 하더라도 어떤 변경 사항도 출력하지 않는다.
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git add file1.txt
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git diff
이때 staging area에 올린 staged 파일과 이 전에 커밋한 파일(unmodified)과 비교를 하기위해서는 --staged 옵션을 추가하면 된다. (--cached 옵션도 사용 가능)
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git diff --staged
diff --git a/file1.txt b/file1.txt
index 5bdcfc1..df7af2c 100644
--- a/file1.txt
+++ b/file1.txt
@@ -1 +1 @@
-version1
+version2
다시 변경 사항이 출력되는 것을 볼 수 있다. 여기서 staged 상태의 파일과 이전 커밋한 파일(unmodified)의 차이가 무엇인지 아직 모르는 분들이 있을 수 있다. 기본적으로 git은 add 명령어를 통해 staging area에 파일을 올릴 때 스냅샷을 생성하기 때문에 지금 현재 commit 되어 있는 file1.txt 파일은 이전의 file1.txt를 add 할 때의 상태인 것이다.
그렇기 때문에 --staged 옵션을 사용하여 git diff를 출력하였을 때, 위와 같은 결과를 출력하는 것이다. 여기서 file1.txt를 unmodified 상태로 만들게 되면 --staged 옵션을 사용하여도 변경사항을 출력하지 않는다.
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git commit -m "modified file"
[master a01c7ea] modified file
1 file changed, 1 insertion(+), 1 deletion(-)
user@DESKTOP-UCJOAKJ MINGW64 /d/git (master)
$ git diff --staged
reference : pro git
'기타 > Git' 카테고리의 다른 글
[Git] rm (0) | 2023.12.14 |
---|---|
[Git] Commit (2) | 2023.12.06 |
[Git] .gitignore (2) | 2023.11.26 |
[Git] status --short (1) | 2023.11.26 |
[Git] add (1) | 2023.11.26 |