기록과 변경 사항

GitBeginner
지금 연습하기

소개

이전 실습에서는 "타임머신"(Git 저장소) 을 초기화하고 첫 번째 스냅샷을 저장하는 방법을 배웠습니다. 하지만 프로젝트는 정적인 상태로 머물지 않습니다. 버그를 수정하고, 기능을 추가하고, 문서를 업데이트하면서 계속 변합니다.

Git 은 이러한 변화를 추적하는 데 매우 유용합니다. 다음 작업을 수행할 수 있습니다.

  1. 변경 사항 확인: 변경 사항을 저장하기 전에 정확히 어떤 줄을 수정했는지 확인합니다.
  2. 기록 검토: 지금까지 저장한 모든 스냅샷을 살펴보고 누가 무엇을 언제 변경했는지 확인합니다.

이것이 버전 관리의 진정한 가치입니다. 단순히 백업을 보관하는 것이 아니라, 프로젝트가 시간에 따라 어떻게 변경되었는지 구조화된 기록으로 남길 수 있습니다.

이 실습에서는 파일을 수정하고, git diff로 정확한 차이점을 확인하고, 새 스냅샷을 저장한 다음, git log로 프로젝트 기록을 살펴봅니다. 이 과정은 실제 Git 작업 흐름에서 반복적으로 사용하는 기본 검토 절차입니다.

프로젝트 파일 수정

처음에는 "Initial commit"이라는 커밋이 하나 있는 저장소를 사용합니다. 이 프로젝트에서 작업을 수행하는 상황을 만들어 보겠습니다.

프로젝트 디렉터리로 이동합니다.

cd /home/labex/project

readme.txt의 현재 내용을 확인합니다.

cat readme.txt

다음 내용이 표시됩니다: Hello World

새 줄을 추가해 파일을 수정합니다. 간단한 설명을 추가합니다.

echo "Git is a version control system" >> readme.txt

파일이 변경되었는지 확인합니다.

cat readme.txt

출력:

Hello World
Git is a version control system

Git 은 readme.txt가 마지막 스냅샷에 저장된 버전과 다르다는 것을 감지했습니다. 이제 이 파일의 상태는 Modified로 간주됩니다.

Git Diff 로 변경 사항 확인

작업 내용을 저장하기 전에 무엇을 변경했는지 정확히 검토하는 것이 좋습니다. 에세이를 제출하기 전에 교정하는 것과 비슷합니다.

Git 은 이 작업을 위해 diff 명령을 제공합니다. 이 명령은 작업 디렉터리의 파일과 마지막 커밋 (스냅샷) 에 저장된 파일을 비교합니다.

즉, git diff는 기록에 저장된 상태와 현재 작업 트리에 있는 상태를 비교합니다. 변경 사항을 영구적으로 기록하기 전에 작업 내용을 검토할 때 사용하는 주요 도구 중 하나입니다.

변경 사항을 확인하려면 git diff를 실행합니다.

git diff

출력을 분석합니다.

diff --git a/readme.txt b/readme.txt
index ...
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 Hello World
+Git is a version control system
  • --- a/readme.txt: 원본 버전 (이전 버전) 입니다.
  • +++ b/readme.txt: 현재 버전 (새 버전) 입니다.
  • +Git is...: 더하기 기호 (+) 는 새로 추가된 줄을 나타냅니다. (빼기 기호 -는 삭제된 줄을 나타냅니다.)

diff 출력을 읽는 것은 Git 의 핵심 기술입니다. 줄 단위로 변경 사항을 보여 주기 때문입니다. 코드 검토, 패치 적용, 풀 리퀘스트와 같은 이후의 여러 작업 흐름도 같은 개념을 기반으로 합니다.

이 단계에서는 변경 사항이 의도한 내용과 정확히 일치하는지 확인합니다.

Git Commit 으로 변경 사항 저장

변경 사항을 확인했으므로 이제 새 스냅샷을 저장합니다. 두 단계로 진행한다는 점을 기억하세요. Stage(로딩 도크에 올리기) 한 다음 Commit(스냅샷 저장) 합니다.

먼저 상태를 확인합니다.

git status

"Changes not staged for commit" 아래에 readme.txt가 빨간색으로 표시됩니다.

파일을 Stage합니다.

git add readme.txt

상태를 다시 확인합니다.

git status

이제 "Changes to be committed" 아래에 readme.txt가 초록색으로 표시됩니다.

이는 수정된 콘텐츠와 스테이징된 콘텐츠를 Git 이 구분한다는 것을 보여 주는 또 다른 예입니다. 파일에 변경 사항이 존재하더라도 스테이징하기 전까지는 다음 커밋에 포함될 후보가 아닙니다.

명확한 메시지를 사용해 스냅샷을 Commit합니다.

git commit -m "Add description about Git"
  • -m: 커밋 메시지를 즉시 작성할 수 있게 합니다.
  • 메시지에는 무엇을 변경했는지 나타내야 합니다.

이제 프로젝트 기록의 두 번째 버전을 저장했습니다!

프로젝트 기록 확인

이제 저장소에 커밋이 두 개 있습니다. 프로젝트의 타임라인을 확인하려면 git log 명령을 사용합니다. 이 명령은 프로젝트의 "기록 책"과 같습니다.

전체 기록을 확인합니다.

git log

출력을 확인합니다.

commit 8d3a1b2... (SHA Hash)
Author: Your Name <you@example.com>
Date:   Mon Oct 10 10:00:00 2023 +0000

    Add description about Git

commit 4f2b3c4... (SHA Hash)
Author: Your Name <you@example.com>
Date:   Mon Oct 10 09:00:00 2023 +0000

    Initial commit
  • SHA Hash: 긴 ID 문자열 (예: 8d3a...) 입니다. 특정 스냅샷을 식별하는 고유한 지문입니다.
  • HEAD: (표시되는 경우) 현재 위치를 가리키는 포인터입니다.
  • 순서: 최신 커밋이 항상 맨 위에 표시됩니다.

이 해시는 Git 이 기록을 식별하는 핵심 요소입니다. Git 은 커밋에 순차적인 번호를 붙이는 대신 콘텐츠를 기반으로 한 식별자를 사용하므로 각 스냅샷에는 고유한 참조값이 있습니다.

필요하면 q를 눌러 로그 화면을 종료합니다.

요약된 기록 확인

프로젝트를 몇 달 동안 작업하면 전체 git log 출력이 너무 길고 자세해질 수 있습니다. 때로는 간단한 요약 목록만 빠르게 확인하고 싶을 때가 있습니다.

Git 은 이때 사용할 수 있도록 --oneline 플래그를 제공합니다.

요약된 로그 명령을 실행합니다.

git log --oneline

출력을 확인합니다.

8d3a1b2 Add description about Git
4f2b3c4 Initial commit

이 화면에는 Short Hash와 Commit Message만 한 줄에 하나씩 표시됩니다. 최근에 어떤 일이 있었는지 빠르게 확인할 때 적합합니다.

Challenge:

readme.txt를 한 번 더 수정해 (줄을 하나 더 추가해) 커밋한 다음 git log --oneline을 다시 확인해 보세요. 세 개의 항목이 표시되어야 합니다!

요약

이 실습에서는 프로젝트에서 변경 사항의 수명 주기를 관리하는 방법을 배웠습니다.

  1. Modify: 파일을 변경했습니다.
  2. Inspect: git diff를 사용해 변경 사항을 확인했습니다.
  3. Commit: git add와 git commit을 사용해 영구적인 스냅샷을 저장했습니다.
  4. Review: git log와 git log --oneline을 사용해 타임라인을 살펴보았습니다.

이 네 가지 명령은 Git 을 일상적으로 사용할 때 핵심이 되는 과정입니다. 이 명령들을 익히면 버전 관리의 기본기를 익힐 수 있습니다.