Part 1 0 / 9 챕터 완료
Chapter 04

첫 번째 커밋 만들기

실제로 Git 저장소를 만들고, 파일을 추가해서 첫 번째 버전을 커밋까지 직접 해봅니다.

🎯 이 챕터를 마치면
  • git init으로 저장소를 초기화할 수 있다
  • git add → git commit 흐름으로 버전을 만들 수 있다
  • git log로 커밋 이력을 확인할 수 있다
  • 좋은 커밋 메시지를 작성하는 법을 안다
  • .gitignore로 추적하지 않을 파일을 설정할 수 있다

🏁 1. 실습 준비

실습용 프로젝트 폴더를 만들고 시작합니다. 오늘 만들 것은 "나의 첫 번째 Git 프로젝트"입니다.

Git Bash
# 프로젝트 폴더 생성
$ mkdir my-first-git
$ cd my-first-git

# 현재 위치 확인
$ pwd
/c/Users/사용자이름/my-first-git

🔧 2. git init — 저장소 초기화

git init은 현재 폴더를 Git 저장소로 만드는 명령어입니다. 프로젝트 시작 시 딱 한 번만 실행합니다.

Git Bash
$ git init
Initialized empty Git repository in /c/Users/.../my-first-git/.git/
git init 실행 후 내부 상태
실행 전
📁 my-first-git/
(비어있음)
실행 후
📁 my-first-git/
📁 .git/ ← Local Repository 생성!
📁 objects/
📁 refs/
📄 HEAD
📄 config
.git 폴더가 생성되면서 이 폴더가 Git 저장소가 됩니다

📸 3. 첫 번째 버전 만들기

파일을 만들고, Staging Area에 올리고, 커밋하는 전체 흐름을 실습합니다.

STEP 1 — 파일 생성

Git Bash
# README.md 파일 생성
$ touch README.md

# 파일 상태 확인
$ git status
On branch main

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        README.md   ← Git이 아직 모르는 상태!
STEP 1 완료 후 내부 상태
📁
Working Directory
● README.md NEW
git add
📋
Staging Area
(비어있음)
git commit
💾
Repository
(비어있음)

STEP 2 — Staging Area에 추가

Git Bash
# README.md를 Staging Area로 이동
$ git add README.md

# 상태 확인
$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   README.md   ← 이제 Staging Area에 있음!
git add 실행 후 내부 상태
📁
Working Directory
○ README.md
git add ✅
📋
Staging Area
● README.md
git commit
💾
Repository
(비어있음)

STEP 3 — 커밋으로 버전 저장

Git Bash
# 첫 번째 커밋 생성
$ git commit -m "feat: README.md 추가"
[main (root-commit) a3f82bc] feat: README.md 추가
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 README.md

# 커밋 후 상태 확인 → 깨끗한 상태!
$ git status
On branch main
nothing to commit, working tree clean
git commit 실행 후 내부 상태
📁
Working Directory
○ README.md
git add
📋
Staging Area
(비어있음)
git commit ✅
💾
Repository
◆ a3f82bc
feat: README.md 추가

STEP 4 — 두 번째 버전 만들기

파일을 수정하고 두 번째 커밋을 만들어 버전이 쌓이는 것을 확인합니다.

Git Bash
# README.md 파일에 내용 추가
$ echo "# 나의 첫 번째 프로젝트" > README.md

# 수정된 파일 확인
$ git status
On branch main
Changes not staged for commit:
        modified:   README.md   ← Modified 상태!

$ git add README.md
$ git commit -m "docs: README에 프로젝트 제목 추가"
[main b7d9e1f] docs: README에 프로젝트 제목 추가
 1 file changed, 1 insertion(+)
두 번째 커밋 후 — 이제 버전이 2개!
b7d9e1f docs: README에 프로젝트 제목 추가 HEAD main
a3f82bc feat: README.md 추가

✍️ 4. 좋은 커밋 메시지 작성법

커밋 메시지는 나중에 이 변경이 일어났는지를 전달하는 문서입니다.

나쁜 커밋 vs 좋은 커밋
❌ 나쁜 예시
fix
수정함
asdfasdf
작업 완료
✅ 좋은 예시
feat: 로그인 기능 추가
fix: 버튼 클릭 오류 수정
docs: README 업데이트
style: 헤더 CSS 정렬

Conventional Commits — 타입 접두사

타입 의미 예시
feat: 새로운 기능 추가 feat: 다크모드 추가
fix: 버그 수정 fix: 로그인 오류 수정
docs: 문서 수정 docs: API 설명 추가
style: 코드 스타일 변경 style: 들여쓰기 정리
refactor: 코드 리팩토링 refactor: 함수 분리
chore: 빌드/설정 변경 chore: .gitignore 추가

🙈 5. .gitignore — 무시할 파일 설정

비밀번호, API 키, 빌드 결과물처럼 Git으로 관리하면 안 되는 파일이 있습니다. .gitignore에 등록하면 Git이 무시합니다.

Git Bash
# .gitignore 파일 생성
$ touch .gitignore
.gitignore 작성 예시
# 환경변수 파일 (비밀번호, API키 등)
.env
.env.local

# 운영체제 파일
.DS_Store       # macOS
Thumbs.db       # Windows

# 빌드 결과물
/dist/
/build/
/node_modules/

# 로그 파일
*.log

# 특정 파일
secret.txt
.gitignore 동작 방식
실제 파일 목록
📄 index.html
📄 style.css
📄 .env ← 비밀 파일!
📁 node_modules/ ← 용량 큰 폴더!
git status 결과 (.gitignore 적용 후)
Untracked files:
📄 index.html ← 보임
📄 style.css ← 보임
⚡ .env, node_modules/ → 완전히 무시됨!
💡

gitignore.io (toptal.com/developers/gitignore) 에서 프로젝트 환경을 선택하면 .gitignore 파일을 자동 생성해줍니다!

✅ 이해도 체크
git init을 실행하면 어떤 변화가 생기는지 설명할 수 있다
실습에서 파일 생성 → add → commit까지 직접 해봤다
git status 결과에서 각 항목의 의미를 이해한다
좋은 커밋 메시지의 형식을 알고 직접 써봤다
.gitignore를 만들고 특정 파일이 무시되는 것을 확인했다
📌 이 챕터 명령어
git init
현재 폴더를 Git 저장소로 초기화
git add 파일명
특정 파일을 Staging Area로 이동
git add .
모든 변경 파일을 Staging Area로 이동
git commit -m "메시지"
Staging Area의 내용을 커밋으로 저장
git log
커밋 이력 확인
git log --oneline
커밋 이력 한 줄로 간략히 확인
🔨 실습 해보기
내 포트폴리오 프로젝트를 Git으로 관리하기

이론을 따라합니다. 물론 커밋 메시지 콘벤션(feat:/fix:/docs: 등)과 .gitignore도 직접 만들어보세요.

0 / 5 완료
1
포트폴리오 폴더 만들고 git init

이론의 STEP 1과 동일합니다. 이번에는 나만의 포트폴리오 프로젝트로 시작합니다.

Git Bash
$ mkdir my-portfolio && cd my-portfolio
$ git init
Initialized empty Git repository in .../my-portfolio/.git/
Step 1 완료 후 상태
Working Dir
(비어있음)
git add
Staging Area
(비어있음)
git commit
Repository
.git 생성
touch README.md index.html style.css
2
파일 3개 생성 → 선택적 add → 콘벤션 메시지로 커밋

이론의 커밋 메시지 표(커뮨던션 컴밋)를 사용합니다. 파일마다 관련 있는 타입 접두사를 됐어 커밋합니다.

Git Bash
$ touch README.md index.html style.css

# docs: 로 README 커밋
$ git add README.md
$ git commit -m "docs: README 추가"

# feat: 로 메인 페이지 커밋
$ git add index.html
$ git commit -m "feat: 메인 페이지 추가"

# style: 로 CSS 커밋
$ git add style.css
$ git commit -m "style: 기본 CSS 추가"
커밋 3개 후 상태
Working Dir
○ README.md
○ index.html
○ style.css
git add
Staging Area
(비어있음)
git commit
Repository
◆ 커밋 3개
git log --oneline
3
git log --oneline 으로 커밋 이력 확인

이론에서 배운 log 명령어로 커밋이 3개 쌓인 것을 눈으로 확인합니다.

Git Bash
$ git log --oneline
c3d9f1a style: 기본 CSS 추가   ← 가장 최신
8b2e4d7 feat: 메인 페이지 추가
a3f82bc docs: README 추가   ← 첫 커밋
4
.gitignore 만들고 실제로 무시되는지 확인

이론의 .gitignore 다이어그램과 동일합니다. 실제로 .env 파일을 만들고 무시되는지 확인합니다.

Git Bash
# .env 파일 생성 (비밀번호 종류라고 가정)
$ touch .env
$ git status
Untracked files:
        .env   ← 아직은 Git이 보임

# .gitignore 생성 후 .env 추가
$ touch .gitignore
$ echo ".env" >> .gitignore

$ git status
Untracked files:
        .gitignore   ← .env는 무시됨!
.gitignore 적용 후 상태
Working Dir
🔴 .gitignore (Untracked)
🚧 .env → 무시!
git add
Staging Area
(비어있음)
git commit
Repository
◆ 이전 커밋 3개
git add .gitignore && git commit -m "chore: .gitignore 추가"
5
INDEX.html 내용 수정 → 두 번째 커밋

이론의 STEP4(두 번째 커밋)! README에 프로젝트 설명을 넣고 Modified → add → commit 흐름을 다시 한 번 연습합니다.

Git Bash
$ echo "# 나의 포트폴리오" > README.md
$ git status
modified:   README.md   ← Modified!

$ git add README.md
$ git commit -m "docs: README에 프로젝트 제목 추가"

$ git log --oneline
매니저 docs: README에 프로젝트 제목 추가  ← HEAD
f2e1b9c chore: .gitignore 추가
c3d9f1a style: 기본 CSS 추가
8b2e4d7 feat: 메인 페이지 추가
a3f82bc docs: README 추가
🧪 이런 상황, 어떻게 할까요?
😰git commit 했는데 "Please tell me who you are" 오류가 나요

Git에 user.name과 user.email이 설정되지 않았습니다.

git config --global user.name "이름"git config --global user.email "이메일"을 먼저 실행하세요 (Ch.02 세팅 내용).

😕커밋 메시지에 오타냈어요!

바로 직전 커밋의 메시지만 수정할 수 있습니다.

git commit --amend -m "수정된 메시지"를 실행하세요. GitHub에 push하기 전에만 해야 합니다!

😱.gitignore에 추가했는데 파일이 여전히 보여요

파일을 이미 git add한 적이 있다면 Git이 계속 추적합니다.

git rm --cached 파일명으로 해당 파일을 Git 추적에서 제외한 뒤 .gitignore에 추가하세요.

💡git add . vs git add 파일명 언제 쓰나요?

두 명령어의 차이를 모으는 질문입니다.

git add .은 모든 변경 파일을 한 번에 add, git add 파일명은 특정 파일만 add합니다. 관련 파일끼리 따로 커밋할 때는 파일명을 지정하세요.

🎉 모든 Step 완료! 커밋 콘벤션과 .gitignore를 직접 만들었습니다.