파일이 특정 브랜치의 일부인지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 브랜치로 전환하지 않고도 해당 브랜치 내에 특정 파일이 존재하는지 확인하는 방법을 배우게 됩니다. 우리는 두 가지 주요 방법을 살펴볼 것입니다: git ls-tree 명령을 사용하여 브랜치의 트리 객체 내용을 검사하고, git log 명령을 사용하여 특정 브랜치의 파일에 대한 커밋 기록을 확인하는 것입니다. 새로운 브랜치를 생성하고, 파일을 추가한 다음, 다른 브랜치에서 해당 파일의 존재 여부를 확인하는 방식으로 이러한 기술을 연습할 것입니다. 마지막으로, 이러한 방법을 다른 브랜치의 파일에 적용하여 테스트할 것입니다.

git ls-tree 브랜치 파일 실행

이 단계에서는 git ls-tree 명령을 사용하여 Git 저장소 내의 특정 브랜치와 파일의 내용을 확인하는 방법을 살펴봅니다. 이 명령은 실제로 해당 브랜치를 체크아웃하지 않고도 특정 시점 또는 다른 브랜치에서 프로젝트의 상태를 검사하는 데 유용합니다.

먼저, 프로젝트 디렉토리에 있는지 확인해 보겠습니다.

cd ~/project/my-time-machine

이제 feature-branch라는 새 브랜치를 생성하고 해당 브랜치로 전환해 보겠습니다. 거기에 새 파일을 추가할 것입니다.

git branch feature-branch
git checkout feature-branch
echo "This is a new feature." > feature.txt
git add feature.txt
git commit -m "Add new feature file"

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

[feature-branch a1b2c3d] Add new feature file
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

이제 master 브랜치에는 존재하지 않는 feature.txt 파일이 있는 새로운 feature-branch 브랜치가 있습니다.

master 브랜치로 다시 전환해 보겠습니다.

git checkout master

브랜치가 전환되었음을 나타내는 출력을 볼 수 있습니다.

Switched to branch 'master'

현재 디렉토리에서 feature.txt 파일이 더 이상 보이지 않는다는 것을 알 수 있습니다. 왜냐하면 master 브랜치에 있기 때문입니다.

이제 git ls-tree를 사용하여 다시 전환하지 않고도 feature-branch의 내용, 특히 feature.txt 파일을 master 브랜치에서 확인해 보겠습니다.

git ls-tree의 기본 구문은 git ls-tree <tree-ish> <path>입니다. <tree-ish>는 브랜치 이름, 커밋 해시 또는 태그가 될 수 있습니다. <path>는 검사하려는 파일 또는 디렉토리의 경로입니다.

feature-branch의 루트 디렉토리의 내용을 보려면 다음을 사용할 수 있습니다.

git ls-tree feature-branch

feature-branch의 루트에 있는 파일을 보여주는 다음과 유사한 출력을 볼 수 있습니다.

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 feature.txt
100644 blob f9e8d7c6b5a4938271605f4e3d2c1b0a98765432 message.txt

이 출력은 파일 모드, 객체 유형 (파일의 경우 blob), 객체 해시 및 파일 이름을 보여줍니다.

feature-branchfeature.txt와 같은 특정 파일의 세부 정보를 보려면 다음을 사용할 수 있습니다.

git ls-tree feature-branch feature.txt

feature.txt에 대한 다음과 유사한 출력을 볼 수 있습니다.

100644 blob a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 feature.txt

이 명령을 사용하면 현재 작업 디렉토리를 변경하지 않고도 다른 브랜치 또는 과거 커밋을 들여다보며 특정 파일의 상태를 확인할 수 있습니다. 이는 브랜치 간의 파일을 비교하거나 과거 버전을 검사하는 데 매우 유용합니다.

git log 브랜치 -- 파일 사용

이 단계에서는 -- 구분 기호를 사용하여 git log 명령을 사용하여 특정 브랜치의 특정 파일에 대한 커밋 기록을 확인하는 방법을 배우게 됩니다. 현재 어떤 브랜치에 있든 관계없이 단일 파일이 시간에 따라 어떻게 변경되었는지 확인하려는 경우 매우 유용합니다.

프로젝트 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine

현재 master 브랜치에 있습니다. 이 브랜치에서 message.txt 파일에 대한 커밋 기록을 확인해 보겠습니다.

git log -- message.txt

message.txt에 대한 커밋 기록을 볼 수 있습니다. master 브랜치에서 이 파일을 포함하는 커밋 (초기 커밋) 을 하나만 만들었으므로 출력은 다음과 유사합니다.

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (HEAD -> master)
Author: Your Name <your.email@example.com>
Date:   Mon Aug 7 10:00:00 2023 +0000

    Send a message to the future

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

이제 feature-branch에서 feature.txt 파일에 대한 커밋 기록을 확인해 보겠습니다. 아직 master 브랜치에 있지만 다른 브랜치의 파일 기록을 검사할 수 있습니다.

구문은 git log <branch-name> -- <file-path>입니다.

git log feature-branch -- feature.txt

feature-branch에서 feature.txt에 대한 커밋 기록을 볼 수 있습니다. feature.txt 파일을 추가한 커밋이 표시됩니다.

commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9 (feature-branch)
Author: Your Name <your.email@example.com>
Date:   Mon Aug 7 10:05:00 2023 +0000

    Add new feature file

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

-- 구분 기호는 중요합니다. Git 에 후속 인수가 브랜치 또는 기타 참조가 아닌 파일 경로임을 알려줍니다. 이를 통해 정확히 어떤 파일의 기록을 보고 싶은지 지정할 수 있습니다.

이 명령은 프로젝트의 특정 부분의 진화를 이해하는 데 매우 강력합니다. 특정 코드 줄이 언제 추가되거나 변경되었는지 파악하려는 경우 git log -- <file>이 가장 좋습니다. 해당 파일에 대한 각 커밋에서 실제로 변경된 내용을 보려면 -p와 같은 옵션을 추가할 수도 있습니다.

다른 브랜치의 파일 테스트

이 단계에서는 현재 브랜치를 전환하지 않고 다른 브랜치의 파일 내용에 액세스하고 보는 연습을 합니다. 파일 버전을 비교하거나 다른 브랜치에서 무언가를 빠르게 확인해야 할 때 매우 일반적인 작업입니다.

프로젝트 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine

현재 master 브랜치에 있습니다. 이를 확인해 보겠습니다.

git branch

출력은 * master를 표시하여 master 브랜치에 있음을 나타냅니다.

  feature-branch
* master

이제 feature-branch에만 존재하는 feature.txt의 내용을 보려고 합니다. 이를 위해 git show 명령을 사용할 수 있습니다. git show 명령은 일반적으로 특정 커밋 또는 브랜치의 파일 내용을 포함하여 Git 의 다양한 유형의 객체를 표시하는 데 사용됩니다.

다른 브랜치의 파일을 보는 구문은 git show <branch-name>:<file-path>입니다.

git show feature-branch:feature.txt

feature-branch에서 feature.txt 파일의 내용을 볼 수 있습니다.

This is a new feature.

이것은 매우 편리합니다! 파일 내용을 보기 위해 브랜치를 전환할 필요가 없었습니다.

이제 feature-branch에서 message.txt의 내용을 보려고 합니다. 이 파일은 두 브랜치 모두에 존재하지만 feature-branch에서 수정했다면 내용이 다를 수 있습니다. 이 경우 내용은 master와 동일합니다.

git show feature-branch:message.txt

feature-branch에서 message.txt의 내용을 볼 수 있습니다.

Hello, Future Me

이것은 git show를 사용하여 저장소의 모든 브랜치 또는 커밋에서 파일에 액세스하는 방법을 보여줍니다. 이는 파일 버전을 비교하고, 과거 상태를 살펴봄으로써 문제를 디버깅하거나, 현재 작업을 방해하지 않고 다른 브랜치의 코드를 검사하는 강력한 기술입니다.

다른 브랜치 또는 커밋의 파일을 빠르게 검사할 수 있으면 시간을 절약하고 프로젝트의 기록과 상태를 보다 효과적으로 이해하는 데 도움이 되는 귀중한 기술입니다.

요약

이 랩에서는 Git 에서 파일이 특정 브랜치의 일부인지 확인하는 방법을 배웠습니다. 브랜치를 체크아웃하지 않고 git ls-tree 명령을 사용하여 브랜치 내용과 해당 브랜치 내의 특정 파일을 보는 것으로 시작했습니다. 여기에는 새 브랜치를 만들고, 파일을 추가하고, 원래 브랜치로 다시 전환한 다음, 브랜치 이름과 파일 경로를 사용하여 git ls-tree를 사용하여 다른 브랜치에서 파일의 존재 여부와 세부 정보를 검사하는 작업이 포함되었습니다. 이 방법은 다른 브랜치에 파일이 존재하는지, 그리고 관련 블롭 해시 (blob hash) 를 빠르게 확인할 수 있는 방법을 제공합니다.