Git 커밋에서 파일 추가 여부 확인 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 커밋에 파일이 추가되었는지 확인하는 방법을 배우게 됩니다. 커밋 세부 정보를 검사하고 새로 추가된 파일을 식별하기 위해 다양한 Git 명령을 탐색할 것입니다.

먼저 git show --name-status를 사용하여 커밋의 변경 사항에 대한 간결한 요약을 볼 것입니다. 특히 추가된 파일을 나타내는 'A' 상태를 찾을 것입니다. 그런 다음, 스크립팅 및 고급 시나리오에 특히 유용한 유사한 결과를 얻기 위해 관련 옵션과 함께 git diff-tree를 사용하는 방법을 배우게 됩니다. 마지막으로, 커밋 기록 내에서 수정된 파일과 추가된 파일을 구별할 것입니다.

git show --name-status 실행

이 단계에서는 변경된 파일과 변경 방법을 포함하여 특정 커밋의 세부 정보를 보는 방법을 살펴봅니다. --name-status 옵션과 함께 git show 명령을 사용합니다.

먼저, my-time-machine 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

이제 git show를 사용하여 이전 랩에서 만든 커밋을 살펴보겠습니다. 가장 최근 커밋을 참조하기 위해 HEAD 별칭을 사용할 수 있습니다.

git show --name-status HEAD

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

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

A       message.txt

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

  • 첫 번째 부분은 git log에서 본 것과 유사한 커밋 세부 정보를 보여줍니다.
  • A message.txt 줄이 여기서 중요한 부분입니다.
    • A는 "Added" (추가됨) 를 의미합니다. 이는 이 커밋에서 message.txt 파일이 추가되었음을 알려줍니다.
    • message.txt는 영향을 받은 파일의 이름입니다.

--name-status 옵션은 커밋에 의해 도입된 변경 사항에 대한 간결한 요약을 제공하여 파일 이름과 상태 (추가됨, 수정됨, 삭제됨 등) 만 표시하므로 매우 유용합니다. 어떤 파일이 관련되었는지 알고 싶을 경우 전체 diff 를 보는 것보다 빠릅니다.

커밋을 검사하는 방법을 이해하는 것은 프로젝트의 기록을 탐색하고 프로젝트가 어떻게 발전했는지 이해하는 데 중요합니다.

git diff-tree 를 사용하여 추가된 파일 확인

이 단계에서는 git diff-tree라는 다른 명령을 사용하여 커밋에 의해 도입된 변경 사항을 확인합니다. git show는 전체 커밋 세부 정보와 diff 를 확인하는 데 유용하지만, git diff-tree는 스크립팅 및 더 고급 시나리오에 유용합니다.

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

git diff-tree-r (재귀적) 및 --name-status 옵션과 함께 커밋 해시 뒤에 사용합니다. 커밋 해시는 git log 또는 git show의 출력에서 얻을 수 있습니다. 첫 번째 커밋의 경우 HEAD를 사용할 수도 있습니다.

git diff-tree -r --name-status HEAD

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

a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 A       message.txt

출력을 살펴보겠습니다.

  • a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9는 커밋 해시입니다.
  • A는 파일 변경 상태 (추가됨) 를 나타냅니다.
  • message.txt는 파일 이름입니다.

이 출력은 git show--name-status 부분과 매우 유사합니다. 첫 번째 커밋 (파일만 추가한 경우) 과 같은 간단한 커밋의 경우 출력은 거의 동일합니다. 그러나 git diff-tree는 더 유연하며 커밋뿐만 아니라 저장소의 서로 다른 트리 (스냅샷) 를 비교하는 데 사용할 수 있습니다.

지금은 핵심은 git show --name-statusgit diff-tree -r --name-status 모두 주어진 커밋에서 어떤 파일이 어떻게 변경되었는지 보여줄 수 있다는 것입니다. 이는 프로젝트의 기록을 이해하는 데 기본적인 기술입니다.

수정된 파일과 추가된 파일 테스트

이전 단계에서 git show --name-statusgit diff-tree --name-status가 추가된 파일에 대해 A를 표시하는 것을 보았습니다. 이제 파일이 수정되었을 때 어떻게 동작하는지 살펴보겠습니다.

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

message.txt 파일에 다른 줄을 추가해 보겠습니다.

echo "Hello again, Future Me" >> message.txt

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

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

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 은 파일이 modified (수정됨) 되었음을 올바르게 식별합니다.

이제 이 변경 사항을 스테이징해 보겠습니다.

git add message.txt

그리고 상태를 다시 확인합니다.

git status

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

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

콘텐츠를 추가했지만 Git 은 이 파일을 modified (수정됨) 파일로 추적한다는 점에 유의하세요. 파일이 이전 커밋에 이미 존재했기 때문입니다.

마지막으로, 이 변경 사항을 커밋해 보겠습니다.

git commit -m "Add another message to the future"

커밋을 확인하는 출력을 볼 수 있습니다.

[master a1b2c3d] Add another message to the future
 1 file changed, 1 insertion(+)

이제 새로운 커밋이 있습니다. 최신 커밋 (HEAD) 에 git show --name-status를 사용하여 상태를 확인해 보겠습니다.

git show --name-status HEAD

출력은 다음과 유사합니다.

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Jane Doe <jane.doe@example.com>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Add another message to the future

M       message.txt

message.txt 앞에 있는 M을 확인하세요. 이는 이 커밋에서 파일이 Modified (수정됨) 되었음을 나타냅니다.

마찬가지로, git diff-tree -r --name-status HEAD를 사용하면 M 상태도 볼 수 있습니다.

A (Added, 추가됨) 와 M (Modified, 수정됨) 의 이러한 구분은 Git 에서 파일의 기록을 이해하는 데 중요합니다. A는 해당 커밋에서 파일이 생성되었음을 의미하고, M은 파일이 이전에 존재했으며 해당 내용이 변경되었음을 의미합니다.

요약

이 랩에서는 Git 커밋에서 파일이 추가되었는지 확인하는 방법을 배웠습니다. 먼저, 커밋의 변경 사항을 간결하게 요약하여 상태 (추가됨의 경우 'A') 와 영향을 받는 파일의 이름을 제공하는 git show --name-status 명령을 살펴보았습니다. 이는 전체 diff 를 보지 않고도 커밋에 관련된 파일을 빠르게 확인하는 방법입니다.

그런 다음, 스크립팅 및 고급 시나리오에 특히 유용한 커밋 변경 사항을 검사하는 대체 방법으로 -r--name-status 옵션과 함께 git diff-tree 명령을 소개했습니다. 이 단계의 전체 세부 사항은 제공되지 않았지만, 소개는 다른 Git 명령을 사용하여 커밋 내에서 추가된 파일을 식별하는 방법을 더 자세히 탐구하는 것을 목표로 함을 나타냅니다.