[Git] 변경 사항을 저장소에 기록하기: git commit 명령어

git add를 통해 스테이징 영역에 파일들을 준비했다면, 다음 단계는 이 변경 사항들을 **로컬 저장소(Local Repository)**에 영구적으로 기록하는 것입니다. 이 과정을 **커밋(Commit)**이라고 하며, git commit 명령어를 사용합니다.

커밋은 프로젝트의 특정 시점을 사진 찍어 저장하는 **스냅샷(Snapshot)**과 같습니다. 각 커밋은 하나의 독립적인 버전이 되며, 고유한 ID(해시 값)를 부여받아 영구적으로 추적됩니다.


## git commit의 핵심 원칙

git commit 명령어는 오직 **스테이징 영역(Staging Area)**에 있는 파일들만을 대상으로 실행됩니다.

이는 매우 중요한 원칙입니다. 작업 디렉터리(Working Directory)에 아무리 많은 파일이 수정되었더라도, git add 명령어로 스테이징 영역에 추가하지 않은 파일은 커밋에 포함되지 않습니다. 이 특징 덕분에 개발자는 자신이 수정한 여러 파일 중, 논리적으로 연관된 변경 사항들(예: ‘로그인 기능 추가’ 관련 파일들)만 선별하여 하나의 의미 있는 커밋으로 묶을 수 있습니다.


## git commit 사용 방법

git commit을 실행하는 방법은 여러 가지가 있으며, 각 방법의 차이를 명확히 아는 것이 중요합니다.

1. 기본 사용법: git commit -m "메시지"

가장 표준적이고 널리 사용되는 방법입니다. -m 플래그는 “message”의 약자로, 커밋에 대한 설명을 인라인으로 바로 작성할 수 있게 해줍니다.

# 1. 파일을 스테이징합니다.
git add index.html
git add style.css

# 2. -m 플래그와 함께 커밋 메시지를 작성하여 커밋합니다.
git commit -m "Add: 웹사이트 메인 페이지 기본 레이아웃 및 스타일 추가"

커밋 메시지는 “무엇을” 그리고 “왜” 변경했는지 명확하게 작성하는 것이 좋습니다.


2. 편집기 사용법: git commit

-m 플래그 없이 git commit 명령어만 입력하면, Git은 시스템의 기본 텍스트 편집기(보통 Vim 또는 Nano)를 실행합니다.

git commit

이 편집기 화면에서 커밋 메시지의 제목과 상세한 본문을 여러 줄로 작성할 수 있습니다.

  • 첫 번째 줄은 제목 (50자 이내 권장)
  • 한 줄을 비우고
  • 세 번째 줄부터 본문 (상세 설명)

메시지 작성을 완료하고 편집기를 저장하고 종료하면(Vim의 경우 :wq 입력 후 Enter), 커밋이 완료됩니다. 이 방법은 여러 줄의 상세한 커밋 메시지를 작성할 때 유용합니다.


3. ‘Add’와 ‘Commit’을 동시에: git commit -am

git commit -a -m "메시지" (또는 -am)는 이미 한 번 이상 Git에 의해 추적되고 있는(Tracked) 파일이 수정되었을 때, git add 과정을 생략하고 바로 커밋할 수 있게 해주는 편리한 옵션입니다.

  • -a는 “all”을 의미하며, 추적 중인 모든 변경 사항을 자동으로 스테이징 영역에 올립니다.
# index.html이 이미 과거에 커밋된 적이 있고, 방금 수정되었다고 가정
# git add index.html 과정을 생략할 수 있음
git commit -am "Fix: 메인 페이지 오타 수정"

[중요] 이 옵션은 매우 편리하지만, 새로 생성되어 **한 번도 Git이 추적한 적 없는 파일(Untracked file)**은 스테이징에 포함시켜주지 않습니다. 새로 만든 파일은 반드시 git add를 먼저 실행해야 합니다.


4. 방금 한 커밋 수정하기: git commit --amend

이 명령어는 가장 최근의 커밋을 수정할 수 있게 해줍니다. 이미 원격 저장소에 push한 커밋에는 절대 사용해서는 안 되지만, 로컬에서 방금 완료한 커밋에 문제가 있을 때 유용하게 사용할 수 있습니다.

  • 시나리오 1: 커밋 메시지 오타 수정 이 명령어는 새로운 커밋을 만드는 것이 아니라, 이전 커밋을 덮어쓰면서 메시지를 수정합니다.
# 방금 한 커밋 메시지에 오타가 있음을 발견
git commit --amend -m "Fix: 메인 페이지 오타 수정 (올바른 메시지)"
  • 시나리오 2: 방금 한 커밋에 파일 빠뜨렸을 때
# 1. index.html만 커밋해버림
git add index.html
git commit -m "Add: 메인 페이지"

# 2. 아차! style.css도 같이 커밋했어야 함
git add style.css

# 3. --amend 옵션으로 커밋을 실행하면, style.css가 이전 커밋에 추가됨
git commit --amend --no-edit
# (--no-edit 옵션은 커밋 메시지를 수정하지 않겠다는 의미)

git commit은 단순한 저장을 넘어, 프로젝트의 이력을 체계적으로 구축하는 첫걸음입니다.