특정 Git 커밋의 변경 사항 확인 방법

GitBeginner
지금 연습하기

소개

Git 은 개발자가 변경 사항을 추적하고, 협업하며, 코드베이스를 효과적으로 관리하는 데 도움이 되는 강력한 버전 관리 시스템입니다. Git 의 기본적인 기술 중 하나는 프로젝트의 히스토리를 검사하여 어떤 변경 사항이 언제, 누구에 의해 이루어졌는지 확인하는 능력입니다. 이 실습에서는 특정 Git 커밋에 도입된 변경 사항을 보는 방법을 배우게 됩니다. 이는 프로젝트의 진화 과정을 이해하고, 코드를 검토하며, 문제를 해결하는 데 필수적입니다.

커밋 히스토리 탐색

특정 커밋의 변경 사항을 보기 전에 먼저 해당 커밋을 찾아야 합니다. git log 명령은 저장소의 커밋 히스토리를 표시하는 데 사용됩니다. 이 실습을 위해 ~/project/git-demo에 샘플 Git 저장소가 생성되었습니다.

먼저 프로젝트 디렉토리로 이동합니다. 이 실습의 모든 명령은 이 디렉토리 내에서 실행해야 합니다.

cd ~/project/git-demo

이제 --oneline 옵션과 함께 git log 명령을 사용하여 커밋 히스토리의 간결한 보기를 확인합니다. 이렇게 하면 각 커밋의 고유한 커밋 해시와 커밋 메시지가 포함된 모든 커밋 목록이 표시됩니다.

git log --oneline

이와 유사한 출력이 표시될 것입니다. 화면의 커밋 해시는 다르겠지만 메시지는 동일합니다.

a1b2c3d (HEAD -> master) Add application file
e4f5g6h Update README with project description
i7j8k9l Initial commit: Add README.md

각 줄은 커밋을 나타냅니다. 각 줄의 시작 부분에 있는 7 자 문자열 (예: a1b2c3d) 은 커밋 해시의 축약된 버전으로, 커밋을 고유하게 식별합니다. 다음 단계에서 이 해시를 사용하여 특정 커밋을 검사합니다.

특정 커밋의 변경 사항 보기

이제 커밋 목록을 확인했으므로 git show 명령을 사용하여 특정 커밋의 세부 정보와 변경 사항을 볼 수 있습니다. 이 명령은 커밋의 메타데이터 (작성자, 날짜, 메시지) 와 "diff"를 표시하며, 이는 추가되거나 제거된 정확한 줄을 강조 표시합니다.

두 번째 커밋, 즉 "Update README with project description" 메시지를 가진 커밋을 검사해 보겠습니다. 이전 단계의 출력에서 해당 커밋의 해시를 찾으십시오.

해시를 복사하여 git show와 함께 사용합니다. <commit-hash>를 터미널의 실제 해시로 바꾸십시오.

git show <commit-hash>

예를 들어, 해당 커밋의 해시가 e4f5g6h였다면 다음과 같이 실행합니다.

git show e4f5g6h

출력은 다음과 유사하게 표시됩니다.

commit e4f5g6h1a2b3c4d5e6f7g8h9i0j1k2l3m4n5o6p7
Author: LabEx <labex@example.com>
Date:   ...

    Update README with project description

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.

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

  • 커밋 메타데이터: 처음 몇 줄은 전체 커밋 해시, 작성자, 날짜 및 커밋 메시지를 보여줍니다.
  • Diff 섹션: diff --git으로 시작하는 부분은 "diff"입니다.
    • --- a/README.md+++ b/README.md는 파일의 "이전" 및 "이후" 버전을 나타냅니다.
    • +로 시작하는 줄은 이 커밋에서 추가된 줄입니다.
    • -로 시작하는 줄 (이 예시에는 없음) 은 제거된 줄입니다.

커밋에서 특정 파일의 변경 사항 보기

때로는 커밋이 여러 파일을 변경했지만 특정 파일의 변경 사항에만 관심이 있을 수 있습니다. git show 명령에 파일 경로를 추가하여 특정 파일에 대한 변경 사항만 표시하도록 할 수 있습니다.

가장 최근 커밋인 "Add application file" 메시지를 가진 커밋을 살펴보겠습니다. 이 커밋은 app.py 파일을 추가했습니다.

먼저 git log --oneline 출력에서 최신 커밋의 해시를 가져옵니다. 그런 다음 해당 해시와 함께 git show를 실행하고 --와 파일 이름 app.py를 추가합니다.

git show app.py < latest-commit-hash > --

예를 들어, 최신 커밋 해시가 a1b2c3d라면 명령은 다음과 같습니다.

git show a1b2c3d -- app.py

이제 출력은 해당 커밋에서 app.py에 대한 변경 사항으로 제한됩니다.

commit a1b2c3d...
Author: LabEx <labex@example.com>
Date:   ...

    Add application file

diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

출력이 훨씬 짧아지고 app.py에 대한 diff 만 포함된다는 점에 유의하십시오. new file mode 100644 줄은 이 파일이 이 커밋에서 생성되었음을 나타냅니다.

두 커밋 비교하기

git show는 단일 커밋 내의 변경 사항을 보는 데 사용되는 반면, git diff를 사용하면 두 커밋 사이의 누적 변경 사항을 볼 수 있습니다. 이는 두 시점 간의 모든 변경 사항을 확인하는 데 유용하며, 예를 들어 두 릴리스 간의 변경 사항을 확인할 때 사용됩니다.

프로젝트에서 지금까지 이루어진 모든 변경 사항을 확인하기 위해 첫 번째 커밋 ("Initial commit: Add README.md") 과 마지막 커밋 ("Add application file") 의 커밋 해시를 사용하여 비교해 보겠습니다.

두 해시와 함께 git diff 명령을 사용합니다.

git diff <first-commit-hash> <last-commit-hash>

예를 들어, 첫 번째 커밋 해시가 i7j8k9l이고 마지막 커밋 해시가 a1b2c3d라면 다음과 같습니다.

git diff i7j8k9l a1b2c3d

출력은 이 두 커밋 사이에 발생한 모든 변경 사항에 대한 결합된 diff 를 보여줍니다.

diff --git a/README.md b/README.md
index ...
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
 ## My Project
+
+This is a simple project to demonstrate Git.
diff --git a/app.py b/app.py
new file mode 100644
index 0000000..d95f32b
--- /dev/null
+++ b/app.py
@@ -0,0 +1 @@
+print("Hello, Git!")

이 출력은 README.md의 업데이트와 app.py의 생성 모두를 보여주어 이 두 시점 간의 프로젝트 진화에 대한 완전한 그림을 제공합니다.

요약

이 실습에서는 Git 저장소의 기록을 탐색하고 변경 사항을 검사하는 방법을 배웠습니다. git log를 사용하여 커밋을 나열하고, git show를 사용하여 단일 커밋 내의 세부 정보 및 변경 사항 (전체 커밋 및 특정 파일 모두) 을 보고, git diff를 사용하여 두 커밋 간의 차이점을 비교하는 연습을 했습니다. 이러한 명령은 코드 변경 사항을 이해하고, 디버깅하며, 모든 Git 기반 프로젝트에서 효과적으로 협업하는 데 필수적입니다.