Git 에서 파일 변경 사항 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 저장소에서 변경 사항을 확인하는 방법을 배우게 됩니다. 수정된 파일을 식별하고 해당 파일에 대한 구체적인 변경 사항을 검사하기 위해 필수적인 Git 명령어인 git statusgit diff를 살펴볼 것입니다.

실습을 통해 git status를 사용하여 어떤 파일이 변경되었는지 확인하고, git diff를 사용하여 파일의 현재 상태와 마지막 커밋 버전 간의 줄 단위 차이점을 볼 수 있습니다. 또한 Git 이 변경되지 않은 파일을 어떻게 표시하는지도 배우게 됩니다.

git status 실행하여 수정된 파일 확인

이 단계에서는 git status를 사용하여 프로젝트에서 어떤 변경 사항을 만들었는지 확인하는 방법을 배우겠습니다.

먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다. 터미널을 열고 다음을 입력합니다.

cd ~/project/my-time-machine

이제 새 파일을 만들어 보겠습니다. message.txt 파일에 간단한 줄을 추가합니다.

echo "P.S. Hope you're doing well!" >> message.txt

>> 기호는 텍스트를 기존 파일에 덮어쓰는 대신 추가합니다.

변경 사항을 확인하기 위해 파일의 내용을 확인해 보겠습니다.

cat message.txt

다음과 같은 내용이 표시되어야 합니다.

Hello, Future Me
P.S. Hope you're doing well!

이제 Git 이 이 변경 사항을 어떻게 인식하는지 살펴보겠습니다. git status 명령을 실행합니다.

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:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

Git 은 message.txt가 "modified"되었다고 알려줍니다. 이는 Git 이 마지막 커밋 이후 파일이 변경되었음을 알고 있지만, 변경 사항이 아직 스테이징 영역에 추가되지 않았음을 의미합니다.

git status를 이해하는 것은 매우 중요합니다. 이는 작업 디렉토리와 스테이징 영역의 현재 상태를 알려주기 때문입니다. 변경 사항을 확인하고 커밋할 준비가 된 내용을 파악하는 데 사용되는 주요 도구입니다.

git diff 를 사용하여 변경 사항 검토

이전 단계에서 git status가 어떤 파일이 수정되었는지 알려주는 것을 보았습니다. 하지만 정확히 어떤 변경 사항이 있었는지 확인하고 싶다면 어떻게 해야 할까요? 바로 이때 git diff가 등장합니다!

git diff는 작업 디렉토리와 마지막 커밋 (또는 스테이징 영역, 사용 방법에 따라 다름) 간의 차이점을 보여줍니다. 현재 파일 버전과 마지막 저장 지점의 버전을 비교하는 것과 같습니다.

실험해 봅시다. 여전히 ~/project/my-time-machine 디렉토리에 있는지 확인하고 다음을 실행합니다.

git diff

다음과 유사한 출력이 표시되어야 합니다.

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

이 출력을 자세히 살펴보겠습니다.

  • diff --git a/message.txt b/message.txt: 이 줄은 Git 이 message.txt 파일의 두 버전을 비교하고 있음을 알려줍니다.
  • index a1b2c3d..e4f5g6h 100644: 파일 버전에 대한 기술적인 정보입니다.
  • --- a/message.txt: 이는 파일의 원래 버전 (변경 전) 을 나타냅니다.
  • +++ b/message.txt: 이는 파일의 새 버전 (변경 후) 을 나타냅니다.
  • @@ -1 +1,2 @@: 이것은 "hunk header"라고 불립니다. 변경 사항이 파일의 어디에 있는지 알려줍니다. -1은 원래 파일의 1 행에서 시작하는 한 줄이 제거되었음을 의미하고, +1,2는 새 파일의 1 행에서 시작하는 두 줄이 있음을 의미합니다.
  • +P.S. Hope you're doing well!: +로 시작하는 줄은 추가된 줄을 나타냅니다. 줄을 삭제했다면 -로 시작했을 것입니다.

git diff는 매우 강력한 도구입니다. 변경 사항을 커밋하기 전에 항상 git diff를 실행하여 저장하려는 내용을 정확히 검토하는 것이 좋습니다. 이렇게 하면 원치 않는 변경 사항이 실수로 커밋되는 것을 방지할 수 있습니다.

diff 보기를 종료하고 명령줄로 돌아가려면 q를 누르십시오.

변경되지 않은 파일 테스트

이전 단계에서 파일이 수정되었을 때 git statusgit diff가 어떻게 작동하는지 살펴보았습니다. 하지만 변경 사항이 없을 때 이러한 명령을 실행하면 어떻게 될까요?

알아봅시다! ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

먼저, git status를 실행합니다.

git status

상태를 마지막으로 확인한 이후 변경 사항이 없으므로, message.txt가 수정되었지만 스테이징되지 않았음을 나타내는 이전과 동일한 출력이 표시되어야 합니다.

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:   message.txt

no changes added to commit (use "git add" and/or "git commit -a")

이제 git diff를 다시 실행해 보겠습니다.

git diff

이전과 동일한 diff 출력이 표시되어 현재 파일과 마지막 커밋 간의 차이점을 보여줍니다.

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

이는 git statusgit diff가 추가 변경 없이 명령을 몇 번이나 실행하든 마지막 커밋을 기준으로 작업 디렉토리의 현재 상태를 보여준다는 것을 확인합니다.

이제 git add를 사용하여 message.txt에 대한 변경 사항을 스테이징해 보겠습니다.

git add message.txt

git status를 다시 실행합니다.

git status

출력이 변경되어 이제 변경 사항이 스테이징되었음을 표시합니다.

On branch master
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
        modified:   message.txt

git status가 이제 "Changes to be committed"를 표시하는 것을 확인하십시오. 이는 변경 사항이 스테이징 영역에 있으며 다음 커밋을 준비하고 있음을 의미합니다.

이제 git diff는 어떨까요? 시도해 봅시다.

git diff

이번에는 git diff가 출력을 표시하지 않습니다. 왜 그럴까요? git diff를 인자 없이 실행하면 작업 디렉토리를 스테이징 영역과 비교하기 때문입니다. 방금 변경 사항을 스테이징 영역에 추가했으므로 작업 디렉토리와 스테이징 영역이 동일합니다.

스테이징 영역과 마지막 커밋 간의 차이점을 보려면 git diff --staged를 사용합니다. 시도해 봅시다.

git diff --staged

이렇게 하면 현재 스테이징 영역에 있는 변경 사항, 즉 우리가 추가한 줄의 diff 가 표시됩니다.

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+P.S. Hope you're doing well!

git diff (작업 디렉토리 vs. 스테이징 영역) 와 git diff --staged (스테이징 영역 vs. 마지막 커밋) 의 차이점을 이해하는 것은 Git 의 핵심 개념입니다. 커밋하기 전에 변경 사항을 관리하는 데 도움이 됩니다.

diff 보기가 나타나면 q를 눌러 종료하십시오.

요약

이 랩에서는 Git 저장소에서 변경 사항을 확인하는 방법을 배웠습니다. 먼저 git status를 사용하여 마지막 커밋 이후 작업 디렉토리에서 어떤 파일이 수정되었는지 식별했습니다. 이 명령은 수정, 스테이징 및 추적되지 않은 파일을 나타내며 저장소의 현재 상태에 대한 요약을 제공합니다.

다음으로, 수정된 파일 내에서 이루어진 특정 변경 사항을 검사하기 위해 git diff를 탐구했습니다. 이 명령은 작업 디렉토리의 현재 파일 버전과 마지막 커밋의 버전 간의 줄 단위 비교를 보여주며 추가 및 삭제를 강조 표시합니다. 마지막으로, 저장소의 파일에 수정 사항이 없는 경우 git status가 변경 사항이 없다고 정확하게 보고하는 것을 확인했습니다.