Git 커밋이 태그의 일부인지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 특정 Git 커밋이 프로젝트의 태그에 포함되어 있는지 확인하는 방법을 배우게 됩니다. 이는 특정 변경 사항을 포함하는 릴리스 또는 버전을 이해하는 데 유용한 기술입니다.

실습을 통해 git tag --contains 명령을 사용하여 주어진 커밋과 관련된 태그를 식별하고, git describe의 기능을 탐색하여 태그를 확인할 것입니다. 또한, 태그가 지정되지 않은 커밋으로 이러한 방법을 테스트하여 이해도를 높일 것입니다.

git tag --contains 커밋 실행

이 단계에서는 git tag --contains 명령을 사용하여 특정 커밋을 포함하는 태그를 찾는 방법을 배우겠습니다. 이는 프로젝트의 어떤 릴리스 또는 버전에 특정 변경 사항이 포함되어 있는지 알고 싶을 때 유용합니다.

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

cd ~/project/my-time-machine

이제 몇 개의 커밋과 태그를 생성하여 작업해 보겠습니다. 새 파일을 추가하고 커밋을 생성합니다.

echo "Another message for the future" > message2.txt
git add message2.txt
git commit -m "Add a second message"

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

[master <commit-hash>] Add a second message
 1 file changed, 1 insertion(+)
 create mode 100644 message2.txt

이제 이 커밋에 태그를 추가해 보겠습니다. v1.0이라고 부르겠습니다.

git tag v1.0

이 명령은 출력을 생성하지 않지만, 최신 커밋을 가리키는 태그를 생성했습니다.

태그 없이 다른 커밋을 생성해 보겠습니다.

echo "A third message" > message3.txt
git add message3.txt
git commit -m "Add a third message"

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

[master <commit-hash>] Add a third message
 1 file changed, 1 insertion(+)
 create mode 100644 message3.txt

이제 두 개의 커밋과 하나의 태그가 있습니다. git log --oneline을 사용하여 커밋 기록을 확인해 보겠습니다.

git log --oneline

다음과 유사한 내용을 볼 수 있습니다 (커밋 해시는 다를 것입니다).

<commit-hash> (HEAD -> master) Add a third message
<commit-hash> (tag: v1.0) Add a second message
<commit-hash> Send a message to the future

v1.0 태그가 "Add a second message" 커밋과 연결되어 있음을 확인하십시오.

이제 "Add a second message" 커밋을 포함하는 태그를 찾아보겠습니다. 이를 위해 커밋 해시가 필요합니다. git log --oneline 출력에서 (tag: v1.0) 옆에 있는 커밋 해시를 복사합니다.

<commit-hash>를 복사한 실제 해시로 바꾸고 다음 명령을 실행합니다.

git tag --contains <commit-hash>

출력에 v1.0이 표시되어야 합니다. 이 태그가 해당 커밋을 직접 가리키기 때문입니다.

이제 첫 번째 커밋 ("Send a message to the future") 을 포함하는 태그를 찾아보겠습니다. git log --oneline에서 해당 커밋의 커밋 해시를 복사합니다.

<first-commit-hash>를 실제 해시로 바꾸고 실행합니다.

git tag --contains <first-commit-hash>

출력에 여전히 v1.0이 표시되어야 합니다. 이는 v1.0이 첫 번째 커밋의 후손인 커밋에 있기 때문입니다. --contains 플래그는 지정된 커밋이 태그가 가리키는 커밋의 조상인지 확인합니다.

이 명령은 특정 버그 수정 또는 기능이 소프트웨어의 어떤 버전에 포함되어 있는지 확인해야 할 때 매우 유용합니다.

git describe 를 사용하여 태그 확인

이 단계에서는 git describe 명령을 살펴보겠습니다. 이 명령은 커밋에서 도달할 수 있는 가장 최근의 태그를 찾는 데 사용됩니다. 특히 직접 태그가 지정되지 않은 커밋에 대해 사람이 읽을 수 있는 이름을 생성하는 데 유용합니다.

여전히 ~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

먼저, 인자 없이 git describe를 실행해 보겠습니다.

git describe

최신 커밋에 태그가 지정되지 않았으므로 git describe는 가장 가까운 태그를 찾은 다음 해당 태그 이후로 얼마나 많은 커밋이 이루어졌는지 알려주고 최신 커밋의 해시를 짧게 표시합니다. 다음과 유사한 출력을 볼 수 있습니다.

v1.0-1-g<commit-hash>

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

  • v1.0: 현재 커밋의 조상인 가장 최근의 태그입니다.
  • 1: v1.0 태그와 현재 커밋 사이에 1 개의 커밋이 있음을 나타냅니다.
  • g<commit-hash>: g는 "git"을 의미하며, <commit-hash>는 현재 커밋의 짧고 고유한 식별자입니다.

이 형식은 태그와 정확히 일치하지 않더라도 특정 빌드 또는 프로젝트 버전을 식별하는 데 매우 유용합니다.

이제 v1.0 태그가 있는 커밋에서 git describe를 실행해 보겠습니다. "Add a second message" 커밋의 커밋 해시가 필요합니다. git log --oneline에서 이 해시를 얻을 수 있습니다.

<commit-hash-of-v1.0>을 실제 해시로 바꾸고 실행합니다.

git describe <commit-hash-of-v1.0>

이번에는 출력 결과가 다음과 같아야 합니다.

v1.0

이는 지정된 커밋이 v1.0으로 직접 태그 지정되었기 때문입니다. 커밋 자체가 태그 지정되면 git describe는 단순히 태그 이름을 출력합니다.

git describe 명령은 커밋과 태그 간의 관계를 이해하는 강력한 도구로, 가장 가까운 태그와의 근접성을 기반으로 커밋의 이름을 지정하는 간결한 방법을 제공합니다.

태그 없는 커밋 테스트

이 단계에서는 직접 태그가 지정되지 않은 커밋에서 git describe가 어떻게 동작하는지 더 자세히 살펴보겠습니다. 이를 통해 가장 가까운 태그를 찾는 방법에 대한 이해를 강화할 것입니다.

~/project/my-time-machine 디렉토리에 있는지 확인하십시오.

현재 v1.0 태그 이후에 커밋이 있습니다. 다른 커밋을 생성해 보겠습니다.

echo "Yet another message" > message4.txt
git add message4.txt
git commit -m "Add a fourth message"

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

[master <commit-hash>] Add a fourth message
 1 file changed, 1 insertion(+)
 create mode 100644 message4.txt

이제 git describe를 다시 실행해 보겠습니다.

git describe

이번에는 출력 결과가 다음과 유사해야 합니다.

v1.0-2-g<commit-hash>

v1.0과 커밋 해시 사이의 숫자가 이제 2인 것을 확인하십시오. 이는 v1.0 태그가 생성된 이후 master 브랜치에 이제 두 개의 커밋이 있기 때문입니다. git describe는 태그가 지정된 커밋에서 현재 커밋까지의 커밋 수를 정확하게 계산합니다.

이 동작은 지속적인 통합 및 배포 파이프라인에서 매우 유용합니다. 여기서 최신 태그와 해당 태그 이후의 커밋 수를 기반으로 빌드에 대한 버전 이름을 자동으로 생성할 수 있습니다.

한 가지 더 시도해 보겠습니다. 새 브랜치를 생성하고 해당 브랜치에서 커밋을 생성합니다.

git checkout -b feature/new-feature
echo "Feature file" > feature.txt
git add feature.txt
git commit -m "Add feature file"

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

Switched to a new branch 'feature/new-feature'
[feature/new-feature <commit-hash>] Add feature file
 1 file changed, 1 insertion(+)
 create mode 100644 feature.txt

이제 이 새 브랜치에서 git describe를 실행합니다.

git describe

출력은 여전히 v1.0 태그를 기반으로 해야 하지만, 커밋 수와 해시는 다를 것입니다.

v1.0-3-g<commit-hash>

다른 브랜치에 있더라도 git describe는 여전히 가장 가까운 도달 가능한 태그를 찾습니다. 이 경우 v1.0입니다. 커밋 수 3v1.0 태그에서 feature/new-feature 브랜치의 현재 커밋까지의 커밋 수 (master 의 두 커밋과 feature 브랜치의 한 커밋) 를 반영합니다.

이는 git describe가 브랜치 간에 어떻게 작동하는지 보여주며, 항상 커밋 기록에서 가장 가까운 태그를 찾습니다.

요약

이 랩에서는 두 가지 주요 방법을 사용하여 Git 커밋이 태그의 일부인지 확인하는 방법을 배웠습니다. 먼저, 지정된 커밋을 포함하는 모든 태그를 직접 나열하는 git tag --contains <commit-hash> 명령을 살펴보았습니다. 이는 특정 변경 사항을 통합하는 릴리스 또는 버전을 식별하는 데 특히 유용합니다. 커밋과 태그를 생성한 다음 git log --oneline을 사용하여 커밋 해시를 얻고, 그 후 git tag --contains로 쿼리하여 이를 실습했습니다.

둘째, 이 발췌문에서는 자세한 단계가 완전히 제공되지 않았지만, 커밋을 태그와 연결하는 또 다른 방법으로 git describe를 사용하는 방법에 대해 간략하게 언급했습니다. 또한 이 랩에는 태그가 지정되지 않은 커밋을 테스트하는 단계가 포함되어 있어, 커밋이 어떤 태그와도 연결되지 않은 경우 이러한 명령이 어떻게 동작하는지에 대한 이해를 강화했습니다. 전반적으로 이 랩은 프로젝트 기록 내에서 커밋과 태그 간의 관계를 탐색하고 이해하기 위해 Git 명령을 사용하는 실질적인 경험을 제공했습니다.