Git 저장소에 커밋되지 않은 변경 사항이 있는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 저장소에서 커밋되지 않은 변경 사항을 확인하는 방법을 배우게 됩니다. 작업 디렉토리와 스테이징된 변경 사항의 전반적인 상태를 확인하기 위해 필수적인 git status 명령어를 살펴볼 것입니다.

또한, git diff 명령어를 사용하여 파일에 적용된 특정 수정 사항을 검사하는 방법을 배우게 됩니다. 이를 통해 커밋하기 전에 정확히 무엇이 변경되었는지 확인할 수 있습니다. 마지막으로, 스테이징된 변경 사항과 스테이징되지 않은 변경 사항을 모두 확인하는 방법을 간략하게 다룰 것입니다.

git status 실행하여 변경 사항 보기

이 단계에서는 git status 명령어를 사용하여 Git 저장소의 현재 상태를 확인하는 방법을 배우겠습니다. 이 명령어는 Git 을 사용할 때 가장 유용한 도구입니다. 이 명령어를 통해 정확히 어떤 상황이 벌어지고 있는지 알 수 있습니다.

먼저, my-time-machine 디렉토리에 있는지 확인하십시오. 다음을 입력하여 확인할 수 있습니다.

cd ~/project/my-time-machine

이제 git status 명령어를 실행해 보겠습니다.

git status

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

On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

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

  • On branch master: 현재 master 브랜치에 있다는 것을 알려줍니다. 브랜치는 프로젝트 내의 서로 다른 타임라인과 같습니다.
  • Your branch is up to date with 'origin/master': 로컬 master 브랜치가 원격 origin/master 브랜치와 동기화되었음을 나타냅니다 (원격 저장소에 대해서는 나중에 자세히 알아보겠습니다).
  • nothing to commit, working tree clean: 이것은 이상적인 상태입니다! 즉, Git 기록에 저장 (커밋) 되지 않은 변경 사항이 프로젝트에 없다는 의미입니다.

git status 명령어는 어떤 파일이 수정되었는지, 새 파일이 있고 추적되지 않는지, 그리고 어떤 변경 사항이 커밋할 준비가 되었는지 이해하는 데 매우 중요합니다. 프로젝트에 변경 사항을 적용한 후 Git 이 해당 변경 사항을 어떻게 인식하는지 확인하기 위해 가장 먼저 실행해야 하는 명령어입니다.

git diff 를 사용하여 수정 사항 검토

이 단계에서는 git diff 명령어를 사용하여 파일에서 변경한 정확한 내용을 확인하는 방법을 배우겠습니다. git status어떤 파일이 변경되었는지 알려주는 반면, git diff는 해당 파일 내에서 무엇이 변경되었는지 보여줍니다.

먼저, message.txt 파일을 변경해 보겠습니다. 여전히 ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

nano 편집기를 사용하여 파일을 엽니다.

nano message.txt

파일에 새 줄을 추가합니다. 예를 들어 다음과 같이 추가합니다.

Hello, Future Me
This is a new line.

Ctrl + X를 눌러 종료하고, Y를 눌러 저장하고, Enter를 눌러 파일 이름을 확인합니다.

이제 파일을 수정했으므로 git status를 사용하여 Git 이 이 변경 사항을 어떻게 인식하는지 살펴보겠습니다.

git status

message.txt가 수정되었다는 것을 나타내는 출력을 볼 수 있습니다.

On branch master
Your branch is up to date with 'origin/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.txtmodified되었고 변경 사항이 not staged for commit이라고 알려줍니다. 즉, 파일을 변경했지만 아직 Git 에 이 변경 사항을 커밋할 준비를 하라고 지시하지 않았습니다.

이제 git diff를 사용하여 특정 변경 사항을 살펴보겠습니다.

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
+This is a new line.

이 출력을 이해해 보겠습니다.

  • ---+++로 시작하는 줄은 원래 파일 (a/message.txt) 과 새 파일 (b/message.txt) 을 보여줍니다.
  • @@로 시작하는 줄은 "hunk header"라고 합니다. 파일에서 변경 사항이 있는 위치를 보여줍니다. -1 +1,2는 원래 파일의 1 행부터 시작하여 1 행이 제거되었고, 새 파일의 1 행부터 시작하여 2 행이 추가되었음을 의미합니다.
  • -로 시작하는 줄은 제거된 줄을 보여줍니다.
  • +로 시작하는 줄은 추가된 줄을 보여줍니다.

이 경우, 한 줄을 추가했으므로 +로 시작하는 줄을 볼 수 있습니다.

git diff 명령어는 변경 사항을 스테이징하거나 커밋하기 전에 검토하는 데 매우 유용합니다. 실수를 발견하고 의도한 수정 사항만 커밋에 포함하는 데 도움이 됩니다.

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

Staged 및 Unstaged 변경 사항 확인

이 단계에서는 Git 이 스테이징된 변경 사항과 스테이징되지 않은 변경 사항을 모두 처리하는 방법과 git diff를 사용하여 이를 검사하는 방법을 살펴보겠습니다.

이전 단계에서 message.txt를 수정했지만 변경 사항을 스테이징하지 않았다는 것을 기억하십시오. 이제 git add를 사용하여 변경 사항을 스테이징해 보겠습니다.

git add message.txt

이제 git status를 다시 실행합니다.

git status

출력 결과는 이제 변경 사항이 스테이징되었음을 보여줍니다.

On branch master
Your branch is up to date with 'origin/master'.

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

Git 은 이제 Changes to be committed를 표시하여 message.txt에 대한 수정 사항이 스테이징 영역에 있으며 다음 커밋을 위해 준비되었음을 나타냅니다.

이제 git diff를 실행하면 어떻게 될까요?

git diff

아무런 출력이 없다는 사실에 놀랄 수도 있습니다. 이는 기본적으로 git diff가 작업 디렉토리와 스테이징 영역 간의 차이점을 보여주기 때문입니다. 작업 디렉토리의 변경 사항이 이제 스테이징 영역의 변경 사항과 동일하므로 (방금 추가했기 때문에) 표시할 차이점이 없습니다.

스테이징 영역과 마지막 커밋 간의 차이점을 보려면 다른 형태의 git diff 명령어를 사용해야 합니다.

git diff --staged

또는 다음과 동일합니다.

git diff --cached

두 명령어 모두 동일한 작업을 수행합니다. 실행해 보겠습니다.

git diff --staged

이제 스테이징된 변경 사항과 마지막 커밋 간의 차이점을 볼 수 있습니다.

diff --git a/message.txt b/message.txt
index a1b2c3d..e4f5g6h 100644
--- a/message.txt
+++ b/message.txt
@@ -1 +1,2 @@
 Hello, Future Me
+This is a new line.

이것은 우리가 한 정확한 변경 사항, 즉 "This is a new line." 줄을 추가하는 것을 보여줍니다.

git diff(작업 디렉토리 vs. 스테이징 영역) 와 git diff --staged(스테이징 영역 vs. 마지막 커밋) 의 차이점을 이해하는 것은 Git 을 효과적으로 사용하는 데 필수적입니다. 이를 통해 영구적인 커밋을 하기 전에 다양한 단계에서 변경 사항을 신중하게 검토할 수 있습니다.

요약

이 랩에서는 Git 저장소에서 커밋되지 않은 변경 사항을 확인하는 방법을 배웠습니다. 먼저 git status 명령어를 사용하여 현재 브랜치와 수정, 새 파일 또는 추적되지 않은 파일이 있는지 여부를 포함하여 저장소 상태에 대한 개요를 얻었습니다. 이 명령어는 어떤 변경 사항이 있는지 이해하는 데 필수적입니다.

다음으로, git diff 명령어를 사용하여 파일 내에서 이루어진 특정 수정 사항을 검사했습니다. git status는 어떤 파일이 변경되었는지 알려주는 반면, git diff는 정확한 줄 단위의 차이점을 보여주므로 스테이징하거나 커밋하기 전에 변경 사항의 내용을 검토할 수 있습니다.