동작하는 코드
예제 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 --version으로 시작해보세요. git init으로 저장소를 초기화해보세요.
직접 수정하기
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가 가리킬 곳이 없습니다. 첫 커밋 후부터 사용됩니다.
git init으로 저장소를 초기화하고, 파일을 만든 뒤 git status로 상태를 확인해보세요.
"왜?" — 버전 관리가 없다면?
버전 관리 없이 개발하면 이런 일이 생깁니다:
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로 현재 설정을 모두 확인하세요.
git init으로 저장소를 만들고, 파일을 추가하고, git status로 변화를 관찰해보세요.
git status에서 빨간색 파일과 초록색 파일의 차이는?