Git 커밋이 현재 브랜치에 있는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 커밋이 현재 브랜치에 존재하는지 확인하는 방법을 배우게 됩니다. 먼저 git log 명령과 커밋 기록을 효율적으로 검색하고 필터링하기 위한 다양한 옵션을 살펴봅니다. 여기에는 커밋 메시지를 검색하는 --grep과 작성자를 기준으로 필터링하는 --author가 포함됩니다.

그 다음, 주어진 커밋을 포함하는 리포지토리의 브랜치를 식별하기 위해 git branch --contains 명령을 사용하는 방법을 배우게 됩니다. 이 실습을 통해 다양한 브랜치에서 프로젝트의 커밋 기록을 효과적으로 탐색하고 이해하는 기술을 습득할 수 있습니다.

git log 를 사용하여 커밋 찾기

이 단계에서는 git log 명령을 사용하여 프로젝트 기록에서 특정 커밋을 찾는 방법을 배우겠습니다. 프로젝트가 성장하고 더 많은 커밋을 만들수록 git log 출력은 상당히 길어질 수 있습니다. Git 은 로그를 필터링하고 검색할 수 있는 강력한 옵션을 제공합니다.

먼저, 작업할 기록을 갖도록 몇 개의 커밋을 더 만들어 보겠습니다. ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine
echo "Adding a second message" >> message.txt
git add message.txt
git commit -m "Add a second message"
echo "Adding a third message" >> message.txt
git add message.txt
git commit -m "Add a third message"

이제 전체 로그를 다시 살펴보겠습니다.

git log

가장 최근의 커밋이 맨 위에 표시된 세 개의 커밋이 표시됩니다.

때로는 메시지에 특정 단어가 포함된 커밋을 찾고 싶을 수 있습니다. 이를 위해 -grep 옵션을 사용할 수 있습니다. "second message"가 있는 커밋을 찾아보겠습니다.

git log --grep "second message"

이 명령은 메시지에 "second message" 구문이 포함된 커밋만 표시합니다.

또 다른 유용한 옵션은 특정 작성자의 커밋을 찾기 위한 -author입니다. 설정에서 작성자 이름을 구성했으므로 "Jane Doe"의 커밋을 찾아보겠습니다.

git log --author "Jane Doe"

이렇게 하면 "Jane Doe"가 만든 모든 커밋이 표시됩니다.

마지막으로, -n 옵션을 사용하여 표시되는 커밋 수를 제한할 수 있습니다. 예를 들어, 마지막 두 개의 커밋만 보려면 다음과 같이 합니다.

git log -n 2

git log와 함께 이러한 옵션을 사용하면 특히 많은 커밋이 있는 더 큰 프로젝트에서 프로젝트 기록을 효율적으로 탐색하는 데 도움이 됩니다.

git branch --contains 를 사용하여 커밋 확인

이 단계에서는 git branch --contains 명령을 사용하는 방법을 살펴보겠습니다. 이 명령은 특정 커밋을 포함하는 브랜치를 찾는 데 유용합니다. 여러 브랜치가 있고 특정 변경 사항이 포함된 위치를 추적해야 할 때 특히 유용합니다.

먼저, 이전 커밋 중 하나의 커밋 해시를 가져오겠습니다. git log --oneline을 사용하여 로그의 축약된 보기를 보고 커밋 해시를 쉽게 복사할 수 있습니다. ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine
git log --oneline

다음과 유사한 출력이 표시됩니다 (커밋 해시는 다를 것입니다).

abcdefg (HEAD -> master) Add a third message
hijklmn Add a second message
opqrstu Send a message to the future

가장 먼저 만든 커밋 ("Send a message to the future") 의 커밋 해시를 복사합니다. 위의 예에서 opqrstu입니다.

이제 이 커밋 해시와 함께 git branch --contains를 사용해 보겠습니다. [commit_hash]를 복사한 실제 해시로 바꿉니다.

git branch --contains [commit_hash]

예를 들어, 예제 출력의 해시를 사용합니다.

git branch --contains opqrstu

출력은 * master를 표시해야 합니다. 별표 *는 현재 체크아웃된 브랜치를 나타냅니다. 이는 커밋 opqrstumaster 브랜치에 있음을 알려줍니다.

현재, 우리는 하나의 브랜치 (master) 만 가지고 있으므로 출력은 간단합니다. 다음 단계에서는 다른 브랜치를 만들고 git branch --contains의 출력이 어떻게 변경되는지 살펴보겠습니다.

특정 커밋을 포함하는 브랜치를 이해하는 것은 프로젝트 기록을 관리하고 서로 다른 개발 라인에서 작업을 조정하는 데 매우 중요합니다.

다른 브랜치로 테스트

이 단계에서는 새 브랜치를 만들고 해당 브랜치에서 커밋을 수행하여 커밋이 하나의 브랜치에만 있는 경우 git branch --contains가 어떻게 동작하는지 살펴보겠습니다. 이를 통해 Git 이 서로 다른 개발 라인에서 커밋을 추적하는 방식을 확실하게 이해할 수 있습니다.

먼저, feature-branch라는 새 브랜치를 만들어 보겠습니다. ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

cd ~/project/my-time-machine
git branch feature-branch

이제 새 브랜치로 전환해 보겠습니다.

git checkout feature-branch

새 브랜치로 전환했음을 나타내는 출력이 표시됩니다.

Switched to branch 'feature-branch'

feature-branch에서 새 커밋을 만들어 보겠습니다.

echo "Adding a feature" >> feature.txt
git add feature.txt
git commit -m "Add a new feature file"

이제 git log --oneline을 사용하여 이 새 커밋의 커밋 해시를 가져오겠습니다.

git log --oneline

출력은 새 커밋을 맨 위에 표시하고 이전 커밋을 그 뒤에 표시합니다. "Add a new feature file" 커밋의 해시를 복사합니다.

이제 "Add a new feature file" 커밋의 해시로 git branch --contains를 사용해 보겠습니다. [feature_commit_hash]를 복사한 실제 해시로 바꿉니다.

git branch --contains [feature_commit_hash]

출력은 * feature-branch만 표시해야 합니다. 이는 이 특정 커밋이 feature-branch를 생성하고 전환한 에 만들어졌기 때문에 이 브랜치의 기록에만 존재하기 때문입니다.

이제 git branch --contains를 맨 처음 커밋 ("Send a message to the future") 의 해시로 다시 시도해 보겠습니다. [first_commit_hash]를 이전 단계에서 사용한 해시로 바꿉니다.

git branch --contains [first_commit_hash]

이번에는 출력에 feature-branch* master가 모두 표시되어야 합니다. 이는 feature-branchmaster 브랜치에서 생성되었기 때문에 첫 번째 커밋을 포함하여 해당 시점에 master에 있던 모든 커밋을 포함하기 때문입니다.

이것은 git branch --contains가 브랜치와 해당 브랜치에 포함된 커밋 간의 관계를 이해하는 데 어떻게 도움이 되는지 보여줍니다.

요약

이 랩에서는 Git 커밋이 현재 브랜치에 있는지 확인하는 방법을 배웠습니다. 먼저, git log 명령과 --grep, --author, -n과 같은 다양한 옵션을 탐색하여 커밋 기록을 효율적으로 검색하고 필터링하는 방법을 배웠습니다. 이는 수많은 커밋이 있는 프로젝트를 탐색하는 데 매우 중요합니다.

그 후, git branch --contains 명령을 사용하여 특정 커밋을 포함하는 브랜치를 식별하는 방법을 배웠습니다. 이 명령은 Git 저장소 내에서 서로 다른 브랜치 간의 변경 사항 전파를 추적하는 데 유용합니다.