동작하는 코드
예제 1: Git 설치 확인과 설정
Git이 설치되어 있는지 확인:
git --version
출력 예시:
git version 2.43.0
버전이 2.x 이상이면 됩니다. 없다면 설치:
# macOS
brew install git
# 확인
git --version
초기 설정 (처음 한 번만, 모든 프로젝트에 적용):
git config --global user.name "홍길동"
git config --global user.email "hong@example.com"
예제 2: 첫 저장소 만들기
mkdir my-project
cd my-project
git init
출력:
Initialized empty Git repository in /Users/dale/my-project/.git/
예제 3: git status로 상태 파악
git status
출력:
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
파일을 만들고 다시 확인:
echo "# 나의 첫 프로젝트" > 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
nothing added to commit but untracked files present
Untracked files는 Git이 아직 추적하지 않는 파일입니다. 빨간색으로 표시됩니다.
직접 수정하기
git status 색상 의미
git status
출력 색상:
- 빨간색: 추적 안 됨(Untracked) 또는 수정됐지만 스테이징 안 됨
- 초록색: 스테이징된 파일 (커밋 대기 중)
# 파일 추가
echo "첫 번째 파일" > file1.txt
echo "두 번째 파일" > file2.txt
git status
출력:
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
file1.txt
file2.txt
# 하나를 스테이징
git add README.md
git status
출력:
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: README.md ← 초록색
Untracked files:
file1.txt ← 빨간색
file2.txt
HEAD란?
HEAD는 현재 내가 작업 중인 위치를 가리키는 포인터입니다.
커밋 A → 커밋 B → 커밋 C
↑
HEAD (현재 위치)
지금은 커밋이 없으므로 HEAD가 가리킬 곳이 없습니다. 첫 커밋 후부터 사용됩니다.
"왜?" — 버전 관리가 없다면?
버전 관리 없이 개발하면 이런 일이 생깁니다:
project_final.zip,project_final_v2.zip,project_final_진짜최종.zip- "어제까지 잘 됐는데 오늘 갑자기 안 됨" → 무엇을 바꿨는지 모름
- 팀원이 같은 파일을 수정해서 충돌 → 누군가의 작업이 사라짐
Git은 이 모든 문제를 해결합니다:
| 문제 | Git 해결책 |
| ---------------------- | --------------------------- |
| 파일 여러 버전 관리 | 커밋으로 스냅샷 저장 |
| 무엇이 바뀌었나? | git diff로 변경 내역 확인 |
| 이전 버전으로 되돌리기 | 커밋 히스토리에서 복원 |
| 팀 협업 충돌 | 브랜치와 머지로 충돌 관리 |
Git의 세 가지 영역
작업 디렉토리 → (git add) → 스테이징 영역 → (git commit) → 저장소
(Working Dir) (Staging Area) (Repository)
- 작업 디렉토리: 실제 파일이 있는 곳
- 스테이징 영역: 다음 커밋에 포함할 변경사항을 모아두는 곳
- 저장소(Repository): 커밋 히스토리가 저장된 곳 (
.git디렉토리)
흔한 실수
실수 1: git config 설정 잊기
git commit # 설정 없이 시도
# Author identity unknown
# Please tell me who you are.
반드시 이름과 이메일을 먼저 설정하세요:
git config --global user.name "이름"
git config --global user.email "이메일"
실수 2: 프로젝트 안에서 git init을 중복으로 실행
cd ~/projects/myapp
git init
# 실수로 하위 디렉토리에서 또 실행
cd src
git init # 저장소 안에 저장소가 생성됨 (중첩 저장소)
git init은 프로젝트 최상위 디렉토리에서 한 번만 실행하세요.
실수 3: .git 디렉토리 삭제
# 절대 하지 마세요!
rm -rf .git # 모든 Git 히스토리가 사라짐
.git 디렉토리는 Git의 데이터베이스입니다. 삭제하면 복구가 불가능합니다.
심화 학습
git config 설정 확인 및 관리
설정한 내용은 ~/.gitconfig에 저장됩니다:
git config --list
출력:
user.name=홍길동
user.email=hong@example.com
core.editor=vim
항목별 확인:
git config user.name
# 홍길동
# 전역 설정 파일 직접 보기
cat ~/.gitconfig
프로젝트마다 다른 설정 (로컬 설정):
# 특정 프로젝트에서만 다른 이메일 사용
git config user.email "work@company.com" # --global 없으면 프로젝트 전용
.git 디렉토리 내부 구조
git init은 .git 숨김 디렉토리를 만듭니다:
ls .git/
출력:
HEAD config description hooks/ info/ objects/ refs/
주요 파일:
HEAD: 현재 브랜치를 가리키는 포인터config: 이 저장소의 설정objects/: 실제 커밋, 파일, 트리 데이터 (SHA-1 해시로 저장)refs/: 브랜치, 태그 포인터
이 구조를 이해하면 Git이 "어떻게" 동작하는지 알 수 있습니다.
기본 브랜치 이름 설정 (main vs master)
최근 Git은 기본 브랜치를 main으로 바꾸는 추세입니다:
# 새 저장소의 기본 브랜치를 main으로 설정
git config --global init.defaultBranch main
이미 master로 만들어진 저장소:
# master를 main으로 이름 변경
git branch -m master main
- 터미널에서
git --version으로 Git이 설치되어 있는지 확인하세요. git config --global user.name "이름"과git config --global user.email "이메일"로 설정하세요.- 새 디렉토리를 만들고
git init으로 저장소를 초기화하세요. README.md를 만든 후git status로 상태를 확인하세요. 빨간색과 초록색 항목이 각각 무엇을 의미하는지 생각해보세요.git config --list로 현재 설정을 모두 확인하세요.
Q1. git status에서 빨간색 파일과 초록색 파일의 차이는?
- A) 빨간색=삭제된 파일, 초록색=새 파일
- B) 빨간색=스테이징 안 됨, 초록색=스테이징된 파일
- C) 빨간색=충돌 파일, 초록색=정상 파일
- D) 빨간색=바이너리 파일, 초록색=텍스트 파일