Commit
한 줄 요약
변경사항을 저장소에 영구적으로 기록하는 스냅샷
개요
Commit(커밋)은 특정 시점의 프로젝트 상태를 저장하는 것입니다. 게임의 세이브 포인트와 같습니다. 언제든 이전 commit으로 돌아갈 수 있습니다.
핵심 포인트
- 각 commit은 고유한 ID(해시값)를 가짐
- commit에는 변경 내용 + 메시지 + 작성자 + 시간이 기록됨
- commit은 이전 commit을 참조하여 히스토리 체인을 형성
시각적 이해
Commit의 구조
┌─────────────────────────────────────┐
│ Commit │
├─────────────────────────────────────┤
│ ID: a1b2c3d │
│ 부모: 9x8y7z6 (이전 커밋) │
│ 작성자: 홍길동 <hong@example.com> │
│ 날짜: 2024-12-04 10:30:00 │
│ 메시지: "로그인 기능 추가" │
├─────────────────────────────────────┤
│ 변경된 파일들의 스냅샷 │
│ - login.js (추가) │
│ - app.js (수정) │
└─────────────────────────────────────┘
Commit 히스토리 체인
[c1]───▶[c2]───▶[c3]───▶[c4] ← HEAD (현재 위치)
│ │ │ │
└───────┴───────┴───────┴── 각 커밋이 이전 커밋을 참조
Commit 만들기
commit을 만들려면 두 단계가 필요합니다:
1단계: Stage에 올리기
git add 파일명어떤 변경사항을 commit할지 선택합니다. → git add 참고
2단계: Commit 생성
git commit -m "변경 내용 설명"선택한 변경사항을 저장소에 기록합니다. → git commit 참고
Commit ID (해시)
각 commit은 40자리 해시값으로 식별됩니다:
commit a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6q7r8s9t0
보통 앞 7자리만 사용해도 구분할 수 있습니다:
git show a1b2c3d좋은 Commit 메시지 작성법
기본 형식
타입: 제목 (50자 이내)
본문 (선택사항, 72자 줄바꿈)
- 무엇을 왜 변경했는지 설명
타입 예시
| 타입 | 설명 |
|---|---|
| feat | 새로운 기능 추가 |
| fix | 버그 수정 |
| docs | 문서 수정 |
| style | 코드 포맷팅 (기능 변화 없음) |
| refactor | 코드 리팩토링 |
| test | 테스트 추가/수정 |
좋은 예시 vs 나쁜 예시
# ❌ 나쁜 예시
git commit -m "수정"
git commit -m "버그 고침"
git commit -m "asdf"
# ✅ 좋은 예시
git commit -m "feat: 로그인 폼 유효성 검사 추가"
git commit -m "fix: 비밀번호 입력 시 특수문자 처리 오류 수정"Commit 히스토리 보기
# 기본 로그
git log
# 한 줄씩 보기
git log --oneline
# 그래프로 보기
git log --oneline --graph→ git log 참고
Commit과 관련된 작업
| 하고 싶은 일 | 명령어 | 참고 |
|---|---|---|
| commit 내용 보기 | git show 커밋ID | git log |
| commit 취소하기 | git reset | git reset |
| commit 되돌리기 | git revert | git revert |
| commit 메시지 수정 | git commit --amend | 커밋 메시지 수정하기 |
자주 하는 실수
”nothing to commit” 메시지
원인: git add를 하지 않음
해결:
git add 파일명
git commit -m "메시지"커밋 메시지를 잘못 작성
해결 (직전 커밋만 가능):
git commit --amend -m "새로운 메시지"→ 커밋 메시지 수정하기 참고
관련 명령어
- git add - commit할 파일 선택
- git commit - commit 생성
- git log - commit 히스토리 조회
- git diff - 변경사항 비교
더 알아보기
- Stage와 Working Directory - commit 전 단계 이해
- HEAD와 포인터 - 현재 commit 위치
- Branch란 - commit과 브랜치의 관계