특정 커밋에서 파일이 수정되었는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 커밋에서 특정 파일이 수정되었는지 확인하는 방법을 배우게 됩니다. 이를 위해 다양한 Git 명령어를 살펴볼 것입니다.

먼저 git show --name-only 명령어를 사용하여 커밋에서 변경된 파일을 볼 것입니다. 그런 다음, git diff-tree를 사용하여 커밋 간의 파일 변경 사항을 검사하는 방법을 배울 것입니다. 마지막으로, 이러한 방법들을 수정되지 않은 파일로 테스트하여 동작을 확인할 것입니다.

git show --name-only 커밋 사용

이 단계에서는 특정 커밋에 대한 자세한 정보를 얻기 위해 git show 명령어를 사용하는 방법을 배웁니다. git log가 커밋의 요약을 보여주는 반면, git show는 단일 타임 캡슐 내부를 들여다볼 수 있게 해줍니다.

git show를 사용하여 첫 번째 커밋의 세부 정보를 확인해 보겠습니다. 또한 해당 커밋에서 변경된 파일의 이름만 보기 위해 --name-only 옵션을 추가할 것입니다.

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

cd ~/project/my-time-machine

이제 --name-only 옵션과 함께 git show 명령어를 실행합니다. 최신 커밋을 참조하기 위해 HEAD를 사용할 수 있습니다.

git show --name-only 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

message.txt

출력을 분석해 보겠습니다.

  • 첫 번째 부분은 git log에서 본 것과 유사하며, 커밋 세부 정보 (커밋 ID, 작성자, 날짜 및 메시지) 를 보여줍니다.
  • 마지막 줄인 message.txt--name-only 옵션의 출력입니다. 이 커밋에서 message.txt 파일이 변경되었음을 알려줍니다.

git show 명령어는 개별 커밋을 검사하는 데 매우 유용합니다. 특정 커밋에서 정확히 어떤 변경 사항이 있었는지, 어떤 파일이 영향을 받았는지, 그리고 해당 변경 사항과 관련된 커밋 메시지를 확인할 수 있습니다. 이를 통해 프로젝트의 히스토리를 자세히 이해할 수 있습니다.

다음 단계에서는 git diff-tree를 사용하여 커밋 간의 파일 변경 사항을 확인하는 또 다른 방법을 살펴볼 것입니다.

파일 변경 사항 확인을 위한 git diff-tree 실행

이 단계에서는 커밋에서 어떤 파일이 변경되었는지 확인하는 또 다른 명령어인 git diff-tree를 살펴봅니다. 이 명령어는 스크립팅 및 자동화에 자주 사용되지만, Git 이 변경 사항을 추적하는 방식을 이해하는 데에도 도움이 됩니다.

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

첫 번째 커밋의 커밋 ID 가 필요합니다. git log --oneline을 실행하여 얻을 수 있습니다.

git log --oneline

다음과 같은 출력을 볼 수 있습니다 (커밋 ID 는 다를 것입니다).

a1b2c3d (HEAD -> master) Send a message to the future

커밋 ID 의 처음 7 자를 복사합니다 (예: a1b2c3d).

이제 git diff-tree 명령어를 실행합니다. 변경 사항을 재귀적으로 표시하기 위해 -r 옵션을 사용하고, 파일 이름만 표시하기 위해 --name-only 옵션을 사용합니다. YOUR_COMMIT_ID를 복사한 커밋 ID 로 바꿉니다.

git diff-tree -r --name-only YOUR_COMMIT_ID

예를 들어, 커밋 ID 가 a1b2c3d인 경우 다음을 실행합니다.

git diff-tree -r --name-only a1b2c3d

다음과 같은 출력을 볼 수 있습니다.

message.txt

이 명령어는 또한 message.txt가 해당 커밋에서 변경된 파일임을 보여줍니다.

git show --name-only가 대화형 사용에 더 편리한 경우가 많지만, git diff-tree는 트리를 비교하는 강력한 명령어이며 (프로젝트의 스냅샷), 더 고급 Git 워크플로우 및 스크립트에서 자주 사용됩니다. Git 이 이러한 스냅샷 간의 변경 사항을 추적한다는 것을 이해하는 것이 버전 관리를 마스터하는 핵심입니다.

수정되지 않은 파일 테스트

이 마지막 단계에서는 Git 이 마지막 커밋 이후 수정되지 않은 파일을 올바르게 식별하는지 확인합니다. 이는 Git 이 변경 사항만 추적한다는 개념을 강화합니다.

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

git status 명령어를 다시 실행합니다.

git status

다음과 같은 출력을 볼 수 있습니다.

On branch master
nothing to commit, working tree clean

이 메시지는 커밋해야 할 작업 디렉토리의 변경 사항이 없음을 알려줍니다. Git 은 message.txt 파일이 마지막 커밋과 정확히 동일하다고 인식합니다.

이제 Git 이 어떻게 반응하는지 보기 위해 추적되지 않은 새 파일을 만들어 보겠습니다.

echo "This is a temporary file" > temp.txt

git status를 다시 실행합니다.

git status

이제 다음을 볼 수 있습니다.

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

nothing added to commit but untracked files present (use "git add" to track)

Git 은 temp.txt를 추적되지 않은 파일로 올바르게 식별합니다. 왜냐하면 git add를 사용하여 아직 Git 에 추적하도록 지시하지 않았기 때문입니다. 이는 Git 이 디렉토리의 파일을 인식하지만, 리포지토리에 추가한 파일만 적극적으로 추적한다는 것을 보여줍니다.

마지막으로, 임시 파일을 정리해 보겠습니다.

rm temp.txt

git status를 마지막으로 한 번 더 실행합니다.

git status

"nothing to commit, working tree clean" 상태로 다시 돌아와야 합니다.

이 단계는 Git 이 어떤 파일이 수정되었는지, 다음 커밋을 위해 스테이징되었는지, 그리고 추적되지 않은 파일이 무엇인지 명확하게 보여줌으로써 프로젝트를 관리하는 데 어떻게 도움이 되는지 강조합니다. 이 명확한 상태 정보는 효과적인 버전 관리에 매우 중요합니다.

요약

이 랩에서는 Git 을 사용하여 특정 커밋에서 파일이 수정되었는지 확인하는 방법을 배웠습니다. 먼저 git show --name-only 명령어를 사용하여 커밋의 세부 정보를 보고 변경된 파일의 이름만 나열했습니다. 이를 통해 특정 커밋의 영향을 받은 파일을 빠르게 확인할 수 있었습니다.

그런 다음, 커밋 내의 파일 변경 사항을 식별하는 또 다른 방법으로 git diff-tree 명령어를 살펴보았습니다. 스크립팅에 자주 사용되지만, git diff-tree를 이해하면 Git 이 수정 사항을 추적하는 방식을 이해하는 데 도움이 됩니다. 이러한 명령어는 프로젝트의 히스토리를 검사하고 개별 커밋에서 도입된 변경 사항을 이해하는 데 유용한 도구입니다.