원격 Git 브랜치의 커밋 기록을 보는 방법

GitBeginner
지금 연습하기

소개

Git 은 개발자가 변경 사항을 추적하고, 프로젝트에 협업하며, 코드베이스의 전체 기록을 유지할 수 있게 해주는 강력한 버전 관리 시스템입니다. Git 에서 필수적인 기술 중 하나는 원격 브랜치의 커밋 기록을 보는 방법을 아는 것입니다. 이를 통해 프로젝트가 어떻게 발전해왔고 누가 특정 변경 사항에 기여했는지 이해할 수 있습니다.

이 실습에서는 실제 GitHub 저장소를 사용하여 원격 Git 브랜치의 커밋 기록을 보고 해석하는 방법을 배울 것입니다. 이 지식은 프로젝트 진화 과정을 더 잘 이해하고, 문제를 디버깅하며, 팀과 더 효과적으로 협업하는 데 도움이 될 것입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 92%입니다.학습자들로부터 89%의 긍정적인 리뷰율을 받았습니다.

Git 저장소 및 기본 로그 명령어 이해하기

원격 브랜치의 커밋 기록을 살펴보기 전에, Git 저장소의 기본 구조와 로컬에서 커밋 기록을 보는 방법을 이해해 봅시다.

이 실습에서는 실제 Git 저장소인 GitHub 의 git-playground 저장소를 사용할 것입니다. 해당 저장소로 이동하여 살펴보겠습니다.

cd ~/project/git-playground

Git 저장소란 무엇인가요?

Git 저장소는 파일들의 모음과 해당 파일들에 대한 변경 기록입니다. Git 은 특정 시점의 파일 스냅샷인 커밋을 통해 변경 사항을 추적합니다.

git-playground 저장소의 구조를 살펴보겠습니다.

ls -la

다음과 같은 파일들을 볼 수 있어야 합니다.

  • README.md - 저장소 문서
  • file1.txt - 샘플 텍스트 파일
  • file2.txt - 또 다른 샘플 텍스트 파일

기본 커밋 기록 보기

Git 에서 커밋 기록을 보는 가장 기본적인 명령어는 git log입니다. 이 명령어는 커밋 기록을 역시간순 (최신 커밋이 먼저) 으로 표시합니다.

한번 실행해 봅시다.

git log

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

commit d22f46ba8c2d4e07d773c5126e9c803933eb5898 (HEAD -> master, origin/master, origin/main, origin/feature-branch, origin/HEAD)
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Added file2.txt

commit cf80005e40a3c661eb212fcea5fad06f8283f08f
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Added file1.txt

commit b00b9374a7c549d1af111aa777fdcc868d8a2a01
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:00 2023 +0800

    Initial commit

각 커밋 항목은 다음을 보여줍니다.

  • 고유한 커밋 해시 (식별자)
  • 커밋 작성자
  • 커밋 날짜 및 시간
  • 커밋 메시지

더 간결한 보기를 원하면 --oneline 옵션을 사용할 수 있습니다.

git log --oneline

이것은 각 커밋을 한 줄에 표시하며, 짧은 커밋 해시와 커밋 메시지만 보여줍니다.

d22f46b Added file2.txt
cf80005 Added file1.txt
b00b937 Initial commit

이러한 기본적인 로그 명령어는 현재 브랜치의 기록을 이해하는 데 도움이 됩니다. 다음 단계에서는 원격 브랜치에 대한 정보를 보는 방법을 살펴보겠습니다.

원격 저장소 및 브랜치 이해하기

이 단계에서는 원격 저장소와 Git 에서 원격 저장소를 다루는 방법에 대해 배울 것입니다.

원격 저장소란 무엇인가요?

원격 저장소는 인터넷이나 다른 네트워크에 호스팅되는 프로젝트의 버전입니다. 다른 사람들과 협업할 때, 원격 저장소로 변경 사항을 푸시 (push) 하고 다른 사람들의 변경 사항을 풀 (pull) 합니다.

우리의 경우, GitHub(https://github.com/labex-labs/git-playground.git) 에 호스팅된 원격 저장소가 있습니다. 이 원격 저장소는 이미 로컬 저장소에 origin이라는 이름으로 설정되어 있습니다.

설정된 원격 저장소를 보려면 다음 명령어를 사용합니다.

git remote -v

다음과 같은 출력을 볼 수 있습니다.

origin  https://github.com/labex-labs/git-playground.git (fetch)
origin  https://github.com/labex-labs/git-playground.git (push)

원격 브랜치 이해하기

원격 브랜치는 원격 저장소에 있는 브랜치의 상태를 나타냅니다. 원격 브랜치는 <remote-name>/<branch-name>의 명명 규칙을 따르며, 예를 들어 origin/master 또는 origin/feature-branch와 같습니다.

로컬 브랜치와 원격 브랜치를 포함한 모든 브랜치를 보려면 다음 명령어를 사용합니다.

git branch -a

출력에는 로컬 및 원격 브랜치가 모두 표시되어야 합니다.

* master
  remotes/origin/HEAD -> origin/master
  remotes/origin/feature-branch
  remotes/origin/main
  remotes/origin/master

원격 데이터 가져오기 (Fetching)

원격 브랜치의 커밋 기록을 보기 전에, 원격 저장소에서 최신 데이터를 가져와야 합니다. 이 작업은 변경 사항을 병합하지 않고 로컬의 원격 브랜치 복사본을 업데이트합니다.

최신 데이터를 가져와 봅시다.

git fetch origin

이 명령어는 원격 저장소에서 모든 최신 커밋, 브랜치 및 파일을 다운로드하여 원격 브랜치의 최신 상태를 볼 수 있게 합니다.

이제 원격 브랜치 이름을 지정하여 git log를 사용하여 원격 브랜치의 커밋 기록을 볼 수 있습니다.

git log origin/feature-branch

이 저장소의 모든 브랜치가 동일한 커밋을 가리키고 있으므로, 동일한 커밋 기록을 보게 될 것입니다.

commit d22f46ba8c2d4e07d773c5126e9c803933eb5898 (HEAD -> master, origin/master, origin/main, origin/feature-branch, origin/HEAD)
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Added file2.txt

commit cf80005e40a3c661eb212fcea5fad06f8283f08f
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:25 2023 +0800

    Added file1.txt

commit b00b9374a7c549d1af111aa777fdcc868d8a2a01
Author: Hang <huhuhang@users.noreply.github.com>
Date:   Wed Apr 26 14:16:00 2023 +0800

    Initial commit

원격 저장소를 이해하고 원격 저장소에서 데이터를 가져오는 방법을 알면, 모든 원격 브랜치의 커밋 기록에 액세스하고 볼 수 있습니다.

원격 브랜치를 위한 고급 Git 로그 명령어

원격 브랜치 기록을 보는 기본 사항을 이해했으니, 커밋 기록을 더 잘 시각화하고 분석하기 위한 고급 Git 로그 옵션을 살펴보겠습니다.

로그 출력 사용자 정의하기

git log 명령어는 출력을 사용자 정의할 수 있는 많은 옵션을 가지고 있습니다. 유용한 몇 가지 옵션은 다음과 같습니다.

간결한 로그 표시

커밋 기록을 더 간결하게 보려면 --oneline 옵션을 사용합니다.

git log --oneline origin/master

출력 예시:

d22f46b Added file2.txt
cf80005 Added file1.txt
b00b937 Initial commit

커밋 수 제한하기

특정 수의 커밋만 보고 싶다면 -n 옵션 뒤에 숫자를 붙여 사용합니다.

git log -n 2 origin/master

이것은 원격 master 브랜치의 가장 최근 커밋 2 개만 표시합니다.

변경 사항이 포함된 커밋 보기

각 커밋에서 발생한 실제 변경 사항을 보려면 -p 옵션 ( "patch"의 약자) 을 추가합니다.

git log -p origin/master

이것은 각 커밋에 대한 전체 diff 를 표시하며, 어떤 줄이 추가되거나 제거되었는지 포함합니다. 이는 버그를 조사하거나 특정 변경 사항을 이해할 때 특히 유용합니다.

특정 파일을 대상으로 이 명령어를 실행해 봅시다.

git log -p origin/master -- file1.txt

이 명령어는 원격 master 브랜치의 file1.txt 파일에 대한 변경 사항이 포함된 커밋 기록을 보여줍니다.

커밋 그래프 시각화하기

커밋 기록의 시각적 표현을 위해 --graph 옵션을 사용합니다.

git log --graph --oneline --all

이것은 커밋과 브랜치 간의 관계를 보여주는 ASCII 그래프를 표시합니다.

* d22f46b (HEAD -> master, origin/master, origin/main, origin/feature-branch, origin/HEAD) Added file2.txt
* cf80005 Added file1.txt
* b00b937 Initial commit

그래프는 브랜치가 어떻게 분기되고 병합되는지 시각화하는 데 도움이 되어 프로젝트의 개발 기록을 더 쉽게 이해할 수 있습니다.

커밋 통계 보기

각 커밋의 변경 사항에 대한 통계를 보려면 다음 명령어를 사용합니다.

git log --stat origin/master

이것은 어떤 파일이 수정되었고 각 커밋에서 몇 줄이 추가되거나 제거되었는지 보여줍니다.

이러한 고급 로그 명령어는 다양한 방식으로 원격 브랜치의 커밋 기록을 분석하고 이해할 수 있는 강력한 도구를 제공합니다.

브랜치 비교 및 특정 커밋 검토하기

이제 원격 브랜치의 커밋 기록을 볼 수 있으므로, 브랜치를 비교하고 특정 커밋을 더 자세히 검토하는 방법을 배워보겠습니다.

브랜치 비교하기

Git 은 서로 다른 브랜치를 비교할 수 있는 강력한 도구를 제공합니다. 저희 git-playground 저장소의 모든 브랜치는 동일한 커밋을 가리키고 있으므로, 먼저 이러한 명령어들을 어떻게 사용하는지 이해한 다음 실제 예시를 살펴보겠습니다.

현재 브랜치와 원격 브랜치 간의 차이를 보려면 다음 명령어를 사용합니다.

git diff origin/main

저희 예시에서는 모든 브랜치가 동일하므로 차이가 표시되지 않습니다. 하지만 실제 프로젝트에서는 현재 브랜치와 원격 브랜치 간에 변경된 내용을 보여줄 것입니다.

두 개의 원격 브랜치를 비교할 수도 있습니다.

git diff origin/master origin/feature-branch

마찬가지로, 동일하기 때문에 차이가 표시되지 않습니다.

특정 커밋 검토하기

때로는 특정 커밋을 자세히 검토해야 할 때가 있습니다. 커밋 해시 뒤에 git show 명령어를 사용하여 이를 수행할 수 있습니다.

먼저 커밋 해시를 가져옵니다.

git log --oneline origin/master

이제 해당 해시를 사용하여 특정 커밋을 검토합니다.

git show d22f46b

이 명령어는 커밋 세부 정보와 해당 커밋에서 도입된 변경 사항을 보여줍니다. file2.txt가 추가된 것을 볼 수 있습니다.

file1.txt를 추가한 커밋을 검토해 봅시다.

git show cf80005

그리고 초기 커밋을 검토합니다.

git show b00b937

원격 브랜치의 파일 내용 보기

원격 브랜치에 있는 특정 파일의 내용을 보려면 다음 명령어를 사용합니다.

git show origin/master:README.md

이것은 원격 저장소의 master 브랜치에 있는 README.md 파일의 내용을 표시합니다.

다른 파일의 내용도 볼 수 있습니다.

git show origin/master:file1.txt
git show origin/master:file2.txt

특정 줄을 수정한 사람 확인하기

특정 파일을 누가 언제 수정했는지 보려면 git blame 명령어를 사용합니다.

git blame README.md

이것은 파일의 각 줄과 함께 해당 줄에 대한 마지막 변경의 커밋 해시, 작성자 및 날짜를 표시합니다.

다른 파일로도 시도해 보세요.

git blame file1.txt
git blame file2.txt

파일 기록 보기

특정 파일이 시간이 지남에 따라 어떻게 발전했는지 보려면 다음 명령어를 사용합니다.

git log -p origin/master -- README.md

이것은 원격 master 브랜치에서 README.md 파일을 수정한 모든 커밋과 각 커밋에서 이루어진 변경 사항을 보여줍니다.

이러한 명령어들은 코드베이스의 기록과 발전을 이해하는 데 유용한 도구를 제공하여, 변경 사항 추적, 문제 디버깅 및 다른 개발자와의 협업을 더 쉽게 만듭니다.

원격 브랜치 기록의 실용적인 적용

원격 브랜치 기록을 보는 기술적인 측면을 배웠으니, 실제 개발 시나리오에서 이 지식을 어떻게 실용적으로 적용할 수 있는지 살펴보겠습니다.

코드 검토 및 변경 사항 이해

팀원들이 만든 코드 변경 사항을 검토할 때 다음 명령어를 사용할 수 있습니다.

git log -p origin/master

이것은 변경 사항을 메인 브랜치에 병합하기 전에 포괄적으로 이해하는 데 도움이 됩니다. 저희 git-playground 예시에서는 각 파일이 언제 어떻게 추가되었는지 정확히 볼 수 있습니다.

이슈 디버깅

애플리케이션에 버그가 발생했을 때, 언제 도입되었는지 추적할 수 있습니다. 예를 들어, 특정 파일에 문제가 있었다면 다음과 같이 할 수 있습니다.

git log -p origin/master -- file1.txt

특정 파일의 커밋 기록을 검토함으로써, 문제가 되는 코드가 언제 그리고 왜 추가되었는지 식별할 수 있습니다.

기능 개발 추적

프로젝트의 개발 진행 상황을 이해하려면 다음 명령어를 사용합니다.

git log --oneline origin/master

이것은 프로젝트에 기여한 커밋들의 연대기적 보기를 제공합니다. 저희 예시에서는 다음과 같습니다.

d22f46b Added file2.txt
cf80005 Added file1.txt
b00b937 Initial commit

프로젝트가 초기 커밋에서 시작하여 순차적으로 두 개의 파일을 추가한 것을 볼 수 있습니다.

기여자 식별

코드베이스의 특정 파일이나 영역에 누가 기여했는지 보려면 다음 명령어를 사용합니다.

git shortlog -sn origin/master

이것은 기여자 요약과 그들이 만든 커밋 수를 보여줍니다.

     3  Hang

특정 파일의 경우:

git shortlog -sn origin/master -- README.md

실제 시나리오 연습하기

프로젝트가 어떻게 발전했는지 이해해야 한다고 가정해 봅시다. 다음 명령어를 시도해 보세요.

  1. 먼저 전체 프로젝트 타임라인을 확인합니다.
git log --oneline --graph --all
  1. 각 커밋에 대한 상세 변경 사항을 봅니다.
git log --stat origin/master
  1. 각 커밋에서 추가된 정확한 내용을 봅니다.
git log -p origin/master
  1. 특정 파일이 마지막으로 수정된 시점을 확인합니다.
git log -1 --format="%H %an %ad %s" origin/master -- file2.txt
  1. 다른 시점에서의 저장소 상태를 비교합니다.
git show cf80005:. | head -10

브랜치 관계 이해하기

저희 저장소의 모든 브랜치는 동일한 커밋을 가리키고 있으므로, 이것이 무엇을 의미하는지 이해해 봅시다.

git show-branch origin/master origin/main origin/feature-branch

이것은 모든 브랜치가 동일한 상태에 있음을 보여주며, 이는 간단한 저장소나 브랜치가 동기화된 상태로 유지될 때 흔히 볼 수 있습니다.

원격 참조 작업하기

모든 원격 참조를 보려면 다음 명령어를 사용합니다.

git ls-remote origin

이것은 원격 저장소에서 사용 가능한 모든 브랜치와 태그를 보여줍니다.

이러한 실용적인 예시는 원격 브랜치 기록을 보는 것이 코드베이스의 발전을 이해하고, 팀원들과 더 효과적으로 협업하며, 문제를 더 효율적으로 해결하는 데 어떻게 도움이 되는지 보여줍니다.

이 랩에서 다룬 기술을 숙달함으로써, 전문적인 개발 환경에서 Git 을 더 잘 활용하고 소프트웨어 프로젝트에서 효과적으로 협업할 수 있게 될 것입니다.

요약

이 랩에서는 효과적인 소프트웨어 개발 프로젝트 협업에 필수적인 기술인 실제 GitHub 저장소 (git-playground) 를 사용하여 원격 Git 브랜치의 커밋 기록을 보고 분석하는 방법을 배웠습니다.

다룬 주요 내용:

  • Git 저장소 및 git log를 사용한 기본 커밋 기록 이해
  • 원격 저장소 작업 및 GitHub 에서 원격 브랜치 데이터 가져오기
  • 고급 Git log 옵션을 사용하여 커밋 기록 사용자 정의 및 시각화
  • 브랜치 비교 및 특정 커밋 상세 검토
  • 실제 커밋 데이터를 사용하여 이러한 기술을 실제 개발 시나리오에 적용

git-playground 저장소를 작업하면서 다음을 확인했습니다.

  • 실제 GitHub 저장소를 복제하고 탐색하는 방법
  • 초기 커밋부터 파일 추가까지의 발전을 보여주는 실제 커밋 기록
  • "Hang"의 세 번의 커밋에 걸친 기여를 분석하기 위해 다양한 Git 명령어를 사용하는 방법
  • 프로젝트 개발 이해에 대한 커밋 분석의 실용적인 적용

이러한 기술을 통해 다음을 수행할 수 있습니다.

  • 프로젝트 발전 및 코드 변경 뒤의 맥락을 더 잘 이해
  • 특정 변경 사항이 언제 그리고 왜 이루어졌는지 추적하여 효과적으로 문제 디버깅
  • 팀원의 기여를 이해하여 더 효과적으로 협업
  • 병합, 브랜칭 및 코드 관리 시 더 나은 정보에 입각한 결정 내리기

Git 을 계속 사용하면서 이러한 능력은 점점 더 가치 있게 되어 복잡한 코드베이스를 탐색하고 협업 개발 프로젝트에 효과적으로 기여하는 데 도움이 될 것입니다.