Git 커밋 메시지에 특정 텍스트가 포함되어 있는지 확인하는 방법

GitBeginner
지금 연습하기

소개

이 랩에서는 Git 커밋 기록에서 특정 텍스트를 효율적으로 검색하는 방법을 배웁니다. 커밋 메시지 내에서 키워드를 기반으로 커밋을 필터링하기 위해 git log --grep 명령을 살펴봅니다. 이를 통해 대규모 프로젝트에서 관련 변경 사항을 빠르게 찾을 수 있습니다.

또한 검색을 통해 찾은 특정 커밋의 세부 정보를 검사하기 위해 git show를 사용하는 방법과, 결과를 구체화하기 위해 git log --grep을 사용하여 대소문자를 구분하는 검색을 수행하는 방법을 배웁니다. 이 랩을 마치면 이러한 Git 명령을 사용하여 프로젝트의 기록을 탐색하고 이해하는 데 능숙해질 것입니다.

git log --grep 을 사용하여 검색

이 단계에서는 git log --grep을 사용하여 커밋 기록을 검색하는 방법을 배웁니다. 이는 커밋이 많고 메시지를 기반으로 특정 커밋을 찾아야 할 때 매우 유용합니다.

먼저, 검색할 내용이 있도록 몇 개의 커밋을 더 만들어 보겠습니다. message.txt 파일에 몇 개의 메시지를 더 추가하겠습니다.

echo "Adding a second message." >> message.txt
git add message.txt
git commit -m "Add second message"

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

[master <commit-id>] Add second message
 1 file changed, 1 insertion(+)

이제 메시지를 하나 더 추가하고 커밋해 보겠습니다.

echo "Adding a third message about the future." >> message.txt
git add message.txt
git commit -m "Add third message about future"

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

[master <commit-id>] Add third message about future
 1 file changed, 1 insertion(+)

이제 기록에 세 개의 커밋이 있습니다. git log를 사용하여 모두 살펴보겠습니다.

git log --oneline

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

<commit-id> Add third message about future
<commit-id> Add second message
<commit-id> Send a message to the future

이제 "future"를 언급하는 커밋을 찾고 싶다고 가정해 보겠습니다. 이를 위해 git log --grep을 사용할 수 있습니다.

git log --grep "future" --oneline

이 명령은 Git 에게 메시지에 "future"라는 단어가 포함된 커밋만 표시하도록 지시합니다. 다음과 유사한 출력을 볼 수 있습니다.

<commit-id> Add third message about future
<commit-id> Send a message to the future

메시지에 "future"가 포함된 커밋만 표시되는 것을 확인하세요. 이는 커밋 기록을 필터링하고 원하는 내용을 빠르게 찾을 수 있는 강력한 방법입니다.

--grep 옵션을 사용하면 특정 패턴에 대해 커밋 메시지를 검색할 수 있습니다. 이는 커밋이 많고 특정 기능 또는 버그 수정과 관련된 커밋을 찾아야 하는 대규모 프로젝트에 매우 유용합니다.

특정 커밋에 대한 git show 실행

이 단계에서는 git show 명령을 사용하여 특정 커밋의 세부 정보를 보는 방법을 배웁니다. 이 명령을 사용하면 특정 커밋에서 도입된 변경 사항을 정확히 확인할 수 있습니다.

먼저, 우리가 만든 첫 번째 커밋의 커밋 ID 를 얻어 보겠습니다. git log --oneline을 다시 사용하여 커밋 목록을 볼 수 있습니다.

git log --oneline

출력을 보고 "Send a message to the future" 커밋 메시지를 찾습니다. 짧은 커밋 ID (메시지 앞의 문자 및 숫자의 문자열) 를 복사합니다. a1b2c3d와 같은 형태일 것입니다.

이제 복사한 커밋 ID 다음에 git show 명령을 사용합니다. <commit-id>를 실제로 복사한 ID 로 바꿉니다.

git show <commit-id>

다음과 같은 특정 커밋에 대한 자세한 정보를 볼 수 있습니다.

  • 커밋 ID, 작성자, 날짜 및 메시지.
  • 해당 커밋에서 이루어진 변경 사항. 첫 번째 커밋의 경우 message.txt 파일이 생성되었고 "Hello, Future Me" 줄이 추가된 것을 보여줍니다.

출력은 다음과 유사하게 보일 것입니다 (커밋 ID 및 날짜는 다를 것입니다).

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

    Send a message to the future

diff --git a/message.txt b/message.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/message.txt
@@ -0,0 +1 @@
+Hello, Future Me

git show 명령은 프로젝트의 기록을 이해하는 데 매우 유용합니다. 이를 사용하여 모든 커밋에서 정확히 어떤 변경 사항이 이루어졌는지 확인할 수 있으며, 이는 디버깅 또는 기능 구현 방식을 이해하는 데 필수적입니다.

또한 커밋 ID 없이 git show를 사용하여 최신 커밋의 세부 정보를 볼 수도 있습니다. 시도해 보세요.

git show

그러면 "Add third message about future" 커밋의 세부 정보가 표시됩니다.

git show 보기를 종료하고 명령줄로 돌아가려면 q를 누를 수 있다는 것을 기억하세요.

대소문자 구분 검색 테스트

이 단계에서는 git log --grep이 대소문자 구분을 어떻게 처리하는지 살펴보겠습니다. 기본적으로 검색은 대소문자를 구분하므로 "future"와 "Future"는 다릅니다.

git log --grep을 사용하여 "Future" (대문자 F) 를 검색해 보겠습니다.

git log --grep "Future" --oneline

이전 커밋을 기반으로, 첫 번째 커밋 메시지 "Send a message to the Future"만 대문자 F 로 "Future"를 포함합니다. 출력은 다음과 유사해야 합니다.

<commit-id> Send a message to the future

"Add third message about future" 커밋은 소문자 "f"를 사용하므로 포함되지 않습니다.

이제 "future" (소문자 f) 를 다시 검색해 보겠습니다.

git log --grep "future" --oneline

이번에는 "future"를 포함하는 두 커밋 모두 (원래 메시지의 대소문자와 관계없이) 표시되어야 합니다.

<commit-id> Add third message about future
<commit-id> Send a message to the future

잠깐만요, 잘못되었네요! 이전 단계에서는 "future"를 검색할 때 두 커밋을 모두 표시했습니다. 이는 일부 시스템 또는 구성에서 git log --grep의 기본 동작이 대소문자를 구분하지 않기 때문입니다.

대소문자를 구분하는 검색을 보장하려면 --i 옵션 (또는 --ignore-case) 을 사용할 수 있습니다. "Future"를 대소문자를 구분하여 검색해 보겠습니다.

git log --grep "Future" --oneline --i

이 명령은 Git 에게 검색 중에 대소문자를 무시하도록 지시합니다. 이제 "future" 또는 "Future"를 포함하는 두 커밋이 모두 표시되어야 합니다.

<commit-id> Add third message about future
<commit-id> Send a message to the future

이는 기본 동작이 다를 수 있지만, --i 옵션을 명시적으로 사용하면 검색이 대소문자를 구분하지 않음을 보여줍니다. 엄격하게 대소문자를 구분하는 검색이 필요한 경우 일반적으로 --i 없이 기본 동작에 의존합니다. 그러나 변동 가능성이 있으므로 대소문자를 구분하지 않는 검색을 위해 --i 옵션을 인식하는 것이 좋습니다.

검색에서 대소문자 구분을 이해하는 것은 특히 커밋 메시지 규칙이 다를 수 있는 프로젝트에서 커밋을 정확하게 찾는 데 중요합니다.

요약

이 랩에서는 Git 커밋 기록을 효과적으로 검색하는 방법을 배웠습니다. 먼저 git log --grep을 사용하여 메시지 내의 특정 텍스트를 기반으로 커밋을 필터링하는 것으로 시작했습니다. 이 강력한 명령을 사용하면 특히 광범위한 커밋 기록이 있는 프로젝트에서 관련 커밋을 빠르게 찾을 수 있습니다. 여러 커밋을 생성한 다음 --grep을 사용하여 "future"라는 단어를 포함하는 커밋을 찾는 방식으로 이를 연습했습니다.

또한 git show를 사용하여 특정 커밋의 세부 정보를 보는 방법과 git log --grep을 사용하여 대소문자를 구분하는 검색을 수행하는 방법을 살펴보았습니다. 이러한 기술은 Git 저장소의 진화를 탐색하고 이해하는 데 필수적인 도구를 제공합니다.