Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

마스터 Git 로그:커밋 보기 및 필터링에 대한 종합 가이드

git log 명령은 Git 저장소의 커밋 기록을 표시합니다. 기본적으로 git log 명령은 커밋 해시, 커밋 메시지 및 기타 커밋 메타데이터를 표시합니다. 다양한 옵션을 사용하여 git log의 출력을 필터링할 수 있습니다.

버전 제어 시스템의 핵심 목적은 시간이 지남에 따라 코드베이스가 어떻게 발전하는지 기록하는 것입니다. 이를 통해 프로젝트가 어떻게 진행되었는지 확인할 수 있습니다. 프로젝트에 누가 기여했는지 알아보고 코드에 어떤 변경 사항이 언제 적용되었는지 확인할 수 있습니다.

하지만 Git 저장소가 생성한 기록을 실제로 어떻게 볼 수 있습니까? 이럴 때 git log 명령이 도움이 될 수 있습니다.

이 튜토리얼에서는 git log 명령의 기본 사항과 이를 사용하여 Git 저장소를 검사하는 방법을 예제와 함께 설명합니다.

git log 명령

git log 명령은 저장소에 대한 모든 커밋 목록을 표시합니다. 각 Git 커밋의 해시, 각 커밋과 관련된 메시지 및 추가 메타데이터를 볼 수 있습니다. 이 명령은 저장소의 기록을 표시하는 데 유용합니다.

git status 명령은 현재 작업 디렉터리에 초점을 맞추는 반면, git log를 사용하면 저장소의 기록을 볼 수 있습니다.

git log 명령 예

git log 명령이 어떻게 작동하는지 예시를 통해 살펴보겠습니다. 우리는 "demo-repository"라는 저장소를 작업해 왔습니다. 이제 우리는 저장소에 푸시한 모든 커밋 목록을 보고 싶습니다. 이를 위해 다음 명령을 사용할 수 있습니다:

git log 명령은 저장소에서 이루어진 모든 커밋 목록을 반환합니다. 다음은 이 명령으로 반환된 단일 커밋의 예입니다:

commit 43433c674e3d6c86a889fad222dae179785893cf (HEAD -> master, origin/master, origin/HEAD)
Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
 Update index.html

이 출력에 대해 단계별로 논의해 보겠습니다. git log 명령으로 반환된 각 항목에는 다음이 포함됩니다.

  • 저장소의 각 커밋을 고유하게 식별하는 데 사용되는 커밋의 SHA(Secure Hash Algorithm) 해시입니다. 위의 예에서는 '43433c674e3d6c86a889fad222dae179785893cf'였습니다.
  • 커밋 작성자입니다. 위의 예에서 이 사람은 James Gallagher였습니다. 작성자의 이메일도 명시되어 있습니다.
  • 커밋이 푸시된 날짜입니다. 위의 예에서는 4월 7일 화요일이었습니다.
  • 커밋과 관련된 메시지입니다. 위에서 반환된 커밋 메시지는 "Update index.html"이었습니다.

이 모든 데이터는 저장소의 커밋에 대한 유용한 정보를 제공합니다.

git log 출력 필터링

기본적으로 git log는 이 구조를 사용하여 저장소에 수행된 모든 커밋 목록을 반환합니다. 상상할 수 있듯이, 읽어야 할 커밋이 많으면 git 로그 문을 읽는 것이 금방 어려워질 수 있습니다.

git log에는 로그를 필터링하는 데 사용할 수 있는 몇 가지 플래그가 함께 제공됩니다. 이는 다음과 같습니다:

가장 최근 항목으로 필터링

특정 수의 커밋을 반환하려면 -n 플래그를 사용하면 됩니다. 다음은 이 플래그가 작동하는 예입니다:

이 명령은 저장소에 이루어진 최근 커밋 3개의 목록을 반환합니다.

작성자 또는 커미터별 필터링

변경 사항을 작성하거나 커밋한 사람이 git log에서 반환한 커밋을 필터링할 수도 있습니다. "John Smith"가 푸시한 커밋 목록을 보고 싶다고 가정해 보겠습니다. 다음 명령을 사용하여 그렇게 할 수 있습니다:

git log --author="John Smith"
git log --committer="John smith"

작성자 플래그는 John Smith가 변경한 커밋으로 결과를 제한합니다. 커미터 플래그는 해당 개인이 실제로 커밋한 커밋으로 결과를 제한합니다.

대부분의 경우 작성자와 커미터가 동일한 개인임을 알 수 있습니다. 대규모 프로젝트에서는 커밋 작성자가 커밋을 저장소에 푸시하는 사람이 아닐 수도 있습니다. 이것이 이 두 플래그가 존재하는 이유입니다.

날짜별 필터링

또한 날짜별로 git log 결과를 필터링할 수 있습니다. 그렇게 하려면 before 및 after 플래그를 사용할 수 있습니다. 이 플래그는 모두 광범위한 날짜 형식을 허용하지만 가장 일반적으로 사용되는 두 가지는 상대 참조와 전체 날짜입니다.

2019-3-2 이후의 커밋 목록을 검색한다고 가정해 보겠습니다. 다음 명령을 사용하여 그렇게 할 수 있습니다:

git log --after="2019-3-2"

커밋을 필터링할 날짜를 지정했습니다. 마찬가지로, 어제 이전의 커밋 목록을 검색하려면 다음 명령을 사용하면 됩니다:

git log --before="yesterday"

상대값('어제')을 지정했습니다.

이제 2019-3-2 이후 및 2019-3-19 이전에 게시된 커밋 목록을 검색한다고 가정해 보겠습니다. 다음 명령을 사용하여 그렇게 할 수 있습니다:

git log --after="2019-3-2" --before="2019-3-19"

파일로 필터링

git log 명령을 사용할 때 특정 파일에 영향을 준 커밋 목록만 보고 싶을 수도 있습니다. 그렇게 하려면 변경 사항을 보려는 파일을 지정하면 됩니다.

코드에서 “main.py” 파일에 대한 변경 사항을 보고 싶다고 가정해 보겠습니다. 다음 명령을 사용하면 됩니다:

— 문은 우리가 지정한 인수가 브랜치 이름이 아니라 파일 경로임을 git log 명령에 지시합니다.

우리 명령에서는 git log 명령의 응답을 필터링하는 데 사용하려는 파일 하나만 지정했습니다. 그러나 원하는 경우 여러 파일을 지정할 수 있습니다.

콘텐츠로 필터링

특정 코드 줄을 제거하거나 추가한 커밋을 검색할 수도 있습니다.

마스터 Git 로그:커밋 보기 및 필터링에 대한 종합 가이드

"Career Karma는 제가 가장 필요할 때 제 삶에 들어왔고 빠르게 부트캠프에 적응할 수 있도록 도와주었습니다. 졸업한 지 두 달 만에 저는 제 삶의 가치와 목표에 맞는 꿈의 직업을 찾았습니다!"

Venus, Rockbot의 소프트웨어 엔지니어

귀하에게 적합한 부트캠프 찾기

코드에 "# 소개"라는 용어를 추가한 모든 커밋을 검색한다고 가정해 보겠습니다. 다음 명령을 사용하여 그렇게 할 수 있습니다:

git log -S"# Introduction"

-S 플래그는 커밋 목록에서 찾고 싶은 커밋 변경 사항을 지정하는 데 사용됩니다. -S 플래그 사이에는 공백이나 등호가 없습니다. 또한 우리가 찾고 있는 커밋의 내용을 지정하는 데 사용한 따옴표입니다.

범위별 필터링

Since 및 Until 매개변수를 사용하여 다양한 커밋을 git log에 전달할 수 있습니다. 이러한 매개변수의 구문은 다음과 같습니다:

b72beb5 커밋이 푸시된 이후부터 b53b22d 커밋이 푸시될 때까지 이루어진 커밋 목록을 검색한다고 가정해 보겠습니다. 다음 명령을 사용하여 그렇게 할 수 있습니다:

이 명령은 b72beb5와 b53b22d 커밋 사이의 모든 커밋 목록을 반환합니다.

메시지로 필터링

–grep 플래그를 사용하면 특정 커밋과 관련된 커밋 메시지를 기준으로 git log에서 반환된 커밋을 필터링할 수 있습니다.

예를 들어 이름이 "feat:"으로 시작하는 모든 커밋 목록을 반환한다고 가정해 보겠습니다. 다음 코드를 사용하여 그렇게 할 수 있습니다:

이 명령은 메시지가 "feat:"으로 시작하는 모든 커밋 목록을 반환합니다.

git log 출력 형식 지정

마지막 섹션에서는 git log 명령의 전체 출력을 다루었습니다. 이 출력에는 커밋에 대한 SHA, 커밋 작성자, 커밋이 푸시된 날짜 및 커밋 메시지가 포함되어 있습니다.

이 모든 정보는 유용하지만 커밋에 대한 특정 데이터만 검색해야 하는 경우가 종종 있습니다. 다행히 git log 명령에는 명령 출력 형식을 지정하는 데 사용할 수 있는 몇 가지 플래그가 함께 제공됩니다.

간단한 로그 반환

기본적으로 git log 문은 저장소에 수행된 각 커밋에 대한 전체 로그 항목을 반환합니다. –oneline 플래그를 사용하여 커밋 ID 및 관련 커밋 메시지 목록을 검색할 수 있습니다.

–oneline 플래그의 구문은 다음과 같습니다:

이전 저장소에서 이 명령을 실행하면 다음이 반환됩니다.

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 feat: Launch new homepage
b72beb5 first commit

커밋 ID와 커밋과 관련된 메시지의 첫 번째 줄을 볼 수 있습니다. 이는 git log 명령이 반환하는 커밋과 관련된 모든 메타데이터보다 읽기 쉽습니다.

각 항목은 한 줄에 나타납니다. 이 git log 한 줄 기술은 너무 많은 정보를 표시하지 않고 커밋을 표시하므로 편리합니다.

출력 장식

–장식 플래그를 사용하면 특정 커밋을 가리키는 모든 참조(예:브랜치 및 태그)를 볼 수 있습니다. 이 플래그의 구문은 다음과 같습니다:

이 명령은 다음을 반환합니다:

43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html
a7d8dc2 docs: Update README.md
b53b22d feat: Update website
3b16026 (tag: v1) feat: Launch new homepage
b72beb5 first commit

이제 목록의 네 번째 커밋에는 태그 이름이 지정되었습니다. 이는 –장식 플래그가 커밋 기록의 각 커밋과 관련된 참조를 표시하기 때문입니다.

차이점 반환

–stat 플래그를 사용하면 각 커밋의 저장소에 추가되고 삭제된 코드 줄 수를 표시할 수 있습니다. 다음은 git log –stat 명령이 실행되는 예입니다:

Author: James Gallagher <james@users.noreply.github.com>
Date: Mon Apr 6 09:11:46 2020 +0100
 feat: Update website
 index.html | 1 +
 index.js | 0
 2 files changed, 1 insertion(+)

더하기 기호(+)는 삽입을 나타내고, 빼기 기호(-)는 삭제를 나타냅니다. 이 데이터를 통해 저장소의 전반적인 변경 사항에 대해 자세히 알아볼 수 있습니다.

저장소에 대한 정확한 변경 사항을 보려면 -p 플래그를 사용할 수 있습니다. 이는 커밋의 변경 사항을 보여주는 보다 포괄적인 diff를 반환합니다.

다음은 예제 저장소에서 실행될 때 git log -p 명령에서 반환된 항목 중 하나입니다:

Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com>
Date: Tue Apr 7 13:09:58 2020 +0100
 Update index.html
diff --git a/index.html b/index.html
index f45673f..2d2701d 100644
--- a/index.html
+++ b/index.html
@@ -1,2 +1,3 @@
-This is a file.
-Changes have been made.
+<body>
+ <p>This is a website.</p>
+</body>

이 출력에는 커밋에 대한 설명과 커밋에서 발생한 각 변경 사항에 대한 자세한 분석이 모두 표시됩니다. 사람들이 언제 우리 저장소의 파일에 콘텐츠를 추가하거나 제거했는지 확인할 수 있습니다.

이 데이터는 유용하지만 표시할 커밋이 많으면 이 출력을 읽기가 금방 어려워질 수 있습니다. 이 문서에서 논의한 다른 플래그 중 하나 이상을 사용할 수 있습니다. 이는 이 커밋에서 반환된 정보가 포괄적이고 읽기 쉬운지 확인하는 데 도움이 됩니다.

git diff 명령 가이드에서 Git diff에 대해 자세히 알아볼 수 있습니다.

git shortlog 명령

git shortlog 명령은 git log의 요약을 제공합니다. git shortlog 명령의 출력은 작성자별로 그룹화되어 누가 저장소를 어떻게 변경했는지 쉽게 확인할 수 있습니다.

이전 저장소에서 git shortlog 명령을 실행해 보겠습니다.

우리의 명령은 다음을 반환합니다:

James Gallagher (5):
 first commit
 feat: Launch new homepage
 feat: Update website
 docs: Update README.md
 Update index.html

James는 이 저장소에 기여한 유일한 사람이며 5개의 커밋을 수행했습니다. 그러나 다른 기여자가 있는 경우 해당 기여자가 저장소에 푸시한 총 커밋 수와 함께 여기에 나열됩니다.

결론

git log 명령은 리포지토리에 어떤 변경 사항이 적용되었는지, 누가, 언제 변경했는지 보여줍니다. git log의 출력을 필터링하여 알아야 할 정보만 표시할 수 있습니다.

git log 명령에는 두 가지 유형의 플래그가 제공됩니다. 일부 플래그는 로그 출력 형식을 지정하는 데 도움이 됩니다. 명령으로 반환된 커밋을 필터링하는 데 도움이 되는 기타 플래그입니다.

이 튜토리얼에서는 예제를 참조하여 git log를 사용하는 방법과 명령과 함께 사용되는 가장 일반적인 플래그를 논의했습니다. git log 명령은 Git으로 작업할 때 무기고에 있는 중요한 도구입니다. 이 명령을 효과적으로 사용하는 방법을 알게 되면 Git 저장소 검사의 달인이 될 것입니다!

Git에 대해 자세히 알아보려면 Git 학습 방법 가이드를 읽어보세요.