Git 커밋이 특정 파일을 수정했는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 커밋이 특정 파일을 수정했는지 확인하는 방법을 배우게 됩니다. 이를 위해 두 가지 다른 방법을 살펴볼 것입니다. 변경된 파일의 빠른 개요를 위해 git show --name-only 명령어를 사용하고, 커밋 내에서 파일 수정을 식별하기 위해 관련 옵션과 함께 보다 기본적인 git diff-tree 명령어를 활용합니다.

실습 예제를 통해 이러한 명령어가 커밋에 의해 도입된 변경 사항에 대한 귀중한 통찰력을 제공하여 Git 저장소의 과거 커밋의 범위와 영향을 이해하는 데 도움이 되는 것을 보게 될 것입니다. 또한 수정되지 않은 파일로 이러한 방법을 테스트하여 이해를 굳건히 할 것입니다.

git show --name-only 실행

이 단계에서는 git show 명령어를 사용하여 특정 커밋에 대한 정보를 보는 방법을 살펴보겠습니다. 이 명령어는 커밋이 도입한 변경 사항을 포함하여 커밋의 세부 정보를 검사하는 데 매우 유용합니다.

git show와 함께 --name-only 옵션을 사용합니다. 이 옵션은 Git 에게 커밋에서 변경된 파일의 이름만 표시하도록 지시합니다. 이는 어떤 파일이 영향을 받았는지 빠르게 확인할 수 있는 방법입니다.

먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다. 터미널을 열고 my-time-machine 디렉토리로 이동합니다.

cd ~/project/my-time-machine

이제 --name-only 옵션과 함께 git show를 사용하여 마지막 커밋에서 변경된 파일을 확인해 보겠습니다. 기억하세요, 마지막 커밋은 message.txt를 추가한 커밋이었습니다.

git show --name-only HEAD

여기서 HEAD는 현재 브랜치의 최신 커밋을 참조하는 Git 의 특수 포인터입니다.

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

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

    Send a message to the future

message.txt

출력은 커밋 세부 정보 (커밋 해시, 작성자, 날짜 및 메시지) 다음에 이 커밋에서 변경된 파일의 이름인 message.txt를 보여줍니다.

git show --name-only를 사용하면 전체 diff (파일 내의 실제 변경 사항) 를 보지 않고 특정 커밋에서 수정된 파일의 요약을 빠르게 얻을 수 있습니다. 이는 커밋의 범위를 알고 싶을 때 유용합니다.

git diff-tree 를 사용하여 파일 변경 확인

이 단계에서는 git diff-tree 명령어를 사용하여 커밋에서 변경된 파일을 확인하는 또 다른 방법을 살펴보겠습니다. git show --name-only가 일반적인 방법인 반면, git diff-tree는 두 개의 트리 객체 (특정 커밋에서 프로젝트의 상태를 나타냄) 간의 차이점을 보여주는 보다 기본적인 명령어입니다.

-r--name-only 옵션과 함께 git diff-tree를 사용합니다. -r 옵션은 명령어를 재귀적으로 만들며, 이는 하위 디렉토리를 살펴본다는 의미입니다. --name-only 옵션은 git show와 유사하게, 다른 파일의 이름만 나열합니다.

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

cd ~/project/my-time-machine

이제 git diff-tree를 사용하여 최신 커밋에서 변경된 파일을 확인해 보겠습니다. 커밋의 커밋 해시 (고유 식별자) 가 필요합니다. git log 또는 git show의 출력에서 이를 얻을 수 있습니다. 첫 번째 커밋의 경우 HEAD를 사용할 수도 있습니다.

git diff-tree -r --name-only HEAD

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

message.txt

이 출력은 git show --name-only보다 간단합니다. git diff-tree는 전체 커밋 세부 정보가 아닌 트리 간의 차이점을 보여주는 데 중점을 두기 때문입니다. --name-only와 함께 사용하면 커밋의 부모와 커밋 자체 사이에서 추가, 삭제 또는 수정된 파일만 나열합니다. 첫 번째 커밋에는 부모가 없었으므로 해당 커밋에 추가된 파일을 표시합니다.

git diff-tree를 이해하는 것은 유용합니다. 다른 Git 명령어가 내부적으로 자주 사용하는 하위 수준 명령어이기 때문입니다. 이를 통해 Git 이 프로젝트의 서로 다른 버전 간의 변경 사항을 추적하는 방식을 이해할 수 있습니다.

수정되지 않은 파일로 테스트

이전 단계에서 git show --name-onlygit diff-tree -r --name-only가 특정 커밋에서 변경된 파일을 표시하는 방법을 살펴보았습니다. 이제 파일이 수정되지 않은 커밋에서 이러한 명령어를 실행할 때 어떤 일이 발생하는지 살펴보겠습니다 (이는 단일 커밋의 경우에 해당하지 않지만, 아이디어를 시뮬레이션할 수 있습니다).

현재 저장소에는 파일이 추가된 커밋이 하나만 있으므로 해당 커밋에서 이러한 명령어를 실행하면 항상 message.txt가 표시됩니다. 수정된 파일만 표시하는 개념을 설명하기 위해, 파일을 변경하지 않은 커밋이 있다고 가정해 보겠습니다 (이는 일반적으로 병합 커밋 또는 메타데이터만 변경하는 커밋에서 발생하지만, 이 연습에서는 파일이 나열되지 않을 때의 출력에 집중하겠습니다).

파일을 수정하지 않은 커밋에서 git show --name-only 또는 git diff-tree -r --name-only를 실행하면 파일 이름 부분의 출력은 비어 있습니다.

개념을 강화하기 위해 배운 명령어를 다시 실행해 보겠습니다. my-time-machine 디렉토리에 있는지 확인합니다.

cd ~/project/my-time-machine

git show --name-only를 다시 실행합니다.

git show --name-only HEAD

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

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9
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 diff-tree -r --name-only를 다시 실행합니다.

git diff-tree -r --name-only HEAD

출력은 다음과 같습니다.

message.txt

두 명령어 모두 message.txt를 올바르게 표시합니다. 이 파일이 이 커밋에서 도입되었기 때문입니다. 여기서 핵심은 이러한 명령어가 지정된 커밋에서 수정된 (추가, 삭제 또는 수정된) 파일만 나열하도록 설계되었다는 것입니다. 커밋이 파일을 변경하지 않으면 이러한 명령어 (특히 파일 목록 부분) 는 아무것도 표시하지 않습니다.

이 동작은 커밋에 의해 도입된 변경 사항의 범위를 이해하는 데 중요합니다. 특정 변경 사항의 영향을 받은 프로젝트의 부분을 빠르게 식별하는 데 도움이 됩니다.

요약

이 랩에서는 특정 Git 커밋에서 어떤 파일이 수정되었는지 확인하는 방법을 배웠습니다. git show --name-only-r--name-only 옵션을 사용하는 git diff-tree의 두 가지 주요 방법을 살펴보았습니다.

먼저 git show --name-only HEAD를 사용하여 최신 커밋에서 변경된 파일의 이름을 빠르게 확인하여 간결한 개요를 제공하는 유용성을 보여주었습니다. 그 후, 보다 기본적인 명령어인 git diff-tree를 소개하고 -r--name-only 옵션과 함께 사용하여 유사한 결과를 얻었으며, 트리 객체를 비교하는 기본 메커니즘을 강조했습니다. 마지막으로, 이러한 명령어를 특정 파일을 수정하지 않은 커밋으로 테스트하여 동작과 이해를 확인했습니다.