Git 에서 파일이 스테이징되었는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 에서 파일이 스테이징되었는지 확인하는 방법을 배우게 됩니다. git status 명령을 사용하여 저장소의 상태를 확인하고 스테이징된 파일을 식별합니다. 그런 다음 git diff --cached를 사용하여 현재 스테이징 영역에 있는 특정 변경 사항을 확인하여 다음 커밋에 포함될 내용을 명확하게 파악할 수 있습니다. 마지막으로, 스테이징 프로세스에 대한 이해를 더욱 공고히 하기 위해 스테이징되지 않은 파일로 테스트를 진행합니다.

스테이징된 파일의 git 상태 확인

이 단계에서는 파일을 스테이징 영역에 추가한 후 Git 저장소의 상태를 확인합니다. 이를 통해 Git 이 커밋되기 전에 변경 사항을 추적하는 방식을 이해할 수 있습니다.

먼저, my-time-machine 디렉토리에 있는지 확인합니다. cd 명령을 사용하여 해당 디렉토리로 이동할 수 있습니다.

cd ~/project/my-time-machine

이제 future_plans.txt라는 새 파일을 만들고 내용을 추가해 보겠습니다.

echo "Plan 1: Build a bigger time machine" > future_plans.txt

이 명령은 파일을 생성하고 "Plan 1: Build a bigger time machine" 텍스트를 파일에 씁니다.

다음으로, git add 명령을 사용하여 이 새 파일을 스테이징 영역에 추가합니다.

git add future_plans.txt

git add는 변경 사항을 스테이징하여 다음 커밋을 준비한다는 것을 기억하세요. 아직 커밋 자체를 생성하지는 않습니다.

이제 git status를 사용하여 저장소의 상태를 확인해 보겠습니다.

git status

다음과 유사한 출력을 볼 수 있습니다.

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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt ## This file is already committed, but Git status shows it differently after a commit. Don't worry about this for now.

"Changes to be committed:" 섹션을 확인하세요. 이는 future_plans.txt가 이제 스테이징 영역에 있으며 다음 커밋에 포함될 준비가 되었음을 나타냅니다. Git 은 이를 "new file"로 인식합니다.

스테이징 영역을 이해하는 것은 Git 에서 매우 중요합니다. 이를 통해 관련 변경 사항을 커밋하기 전에 함께 그룹화할 수 있습니다. 즉, 여러 가지 작업을 수행할 수 있지만 준비가 된 특정 변경 사항만 커밋할 수 있습니다.

git diff --cached 를 사용하여 확인

이 단계에서는 현재 스테이징 영역에 있는 변경 사항을 확인하는 방법을 배웁니다. 여기서 git diff 명령이 유용하게 사용되며, 특히 --cached 옵션과 함께 사용됩니다.

여전히 ~/project/my-time-machine 디렉토리에 있는지 확인합니다.

이전에 future_plans.txt를 스테이징 영역에 추가했습니다. 이제 git diff --cached를 사용하여 스테이징된 변경 사항을 정확히 확인해 보겠습니다.

git diff --cached

다음과 유사한 출력을 볼 수 있습니다.

diff --git a/future_plans.txt b/future_plans.txt
new file mode 100644
index 0000000..a1b2c3d
--- /dev/null
+++ b/future_plans.txt
@@ -0,0 +1 @@
+Plan 1: Build a bigger time machine

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

  • diff --git a/future_plans.txt b/future_plans.txt: 이 줄은 Git 이 future_plans.txt 파일의 두 버전 간의 차이점을 보여주고 있음을 나타냅니다.
  • new file mode 100644: 이는 future_plans.txt가 새 파일임을 보여줍니다.
  • index 0000000..a1b2c3d: 이는 파일 내용에 대한 내부 Git 식별자입니다.
  • --- /dev/null+++ b/future_plans.txt: 이 줄은 파일이 아무것도 없는 상태 (/dev/null) 에서 future_plans.txt의 새 버전으로 비교되고 있음을 나타냅니다.
  • @@ -0,0 +1 @@: 이는 변경된 줄을 나타내는 "hunk header"입니다. -0,0은 원래 (존재하지 않는) 파일에서 0 줄을 의미하고, +1은 새 파일에서 1 줄을 의미합니다.
  • +Plan 1: Build a bigger time machine: 줄 시작 부분의 + 기호는 이 줄이 추가되었음을 나타냅니다.

git diff --cached 명령은 스테이징 영역과 마지막 커밋 간의 차이점을 보여줍니다. 이 저장소에서 아직 커밋을 하지 않았기 때문에 (이전 랩의 초기 커밋 제외), 스테이징 영역과 빈 상태 간의 차이점을 보여줍니다.

이 명령은 커밋하기 전에 스테이징된 변경 사항을 검토하는 데 매우 유용합니다. 의도한 변경 사항만 커밋하는지 확인하는 데 도움이 됩니다.

q를 눌러 diff 보기를 종료하고 명령줄로 돌아갑니다.

스테이징되지 않은 파일 테스트

이 단계에서는 추적된 파일에 대해 변경 사항이 발생했지만 아직 스테이징 영역에 추가되지 않은 경우 Git 이 이를 처리하는 방식을 살펴봅니다. 이러한 변경 사항을 "unstaged" 변경 사항이라고 합니다.

~/project/my-time-machine 디렉토리에 있는지 확인합니다.

이전에 future_plans.txt를 생성하고 스테이징했습니다. 이제 변경 사항을 스테이징하지 않고 이 파일에 다른 줄을 추가해 보겠습니다.

echo "Plan 2: Invent a self-folding laundry machine" >> future_plans.txt

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

이제 저장소의 상태를 다시 확인해 보겠습니다.

git status

다음과 유사한 출력을 볼 수 있습니다.

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

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

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        message.txt

새로운 섹션인 "Changes not staged for commit:"을 확인하세요. 이는 Git 이 스테이징 영역의 버전과 다른 future_plans.txt의 변경 사항을 감지했음을 알려줍니다. 파일은 "modified"로 나열됩니다.

이는 Git 의 핵심 개념입니다. 작업 디렉토리 (변경 사항을 만드는 곳) 는 스테이징 영역과 별개입니다. 아직 스테이징되지 않은 변경 사항이 작업 디렉토리에 있을 수 있습니다.

작업 디렉토리와 스테이징 영역 간의 차이점을 확인하려면 옵션 없이 git diff를 사용할 수 있습니다.

git diff

다음과 유사한 출력을 볼 수 있습니다.

diff --git a/future_plans.txt b/future_plans.txt
index a1b2c3d..e4f5g6h 100644
--- a/future_plans.txt
+++ b/future_plans.txt
@@ -1 +1,2 @@
 Plan 1: Build a bigger time machine
+Plan 2: Invent a self-folding laundry machine

이 출력은 스테이징 영역의 future_plans.txt 버전 ( "Plan 1"만 포함) 과 작업 디렉토리의 버전 (이제 "Plan 1"과 "Plan 2" 모두 포함) 간의 차이점을 보여줍니다. + 기호는 다시 추가된 줄을 나타냅니다.

스테이징된 변경 사항과 스테이징되지 않은 변경 사항의 차이점과 git statusgit diff를 사용하여 이를 확인하는 방법을 이해하는 것은 Git 을 효과적으로 사용하는 데 필수적입니다.

q를 눌러 diff 보기를 종료합니다.

요약

이 랩에서는 Git 에서 파일이 스테이징되었는지 확인하는 방법을 배웠습니다. 먼저 git add를 사용하여 새 파일을 생성하고 스테이징 영역에 추가하는 것으로 시작했습니다. 그런 다음 git status를 사용하여 파일이 "Changes to be committed" 아래에 나열되어 스테이징되었음을 확인했습니다.

또한 git diff --cached를 사용하여 현재 스테이징 영역에 있는 특정 변경 사항을 확인하여 다음 커밋에 포함될 내용을 자세히 살펴보았습니다. 마지막으로, 스테이징되지 않은 파일로 git status의 동작을 테스트하여 스테이징된 변경 사항과 스테이징되지 않은 변경 사항을 구분했습니다.