Git 기초 매뉴얼
내 컴퓨터에서 코드의 변경 이력을 기록하고 되돌리는 핵심 명령어 모음 | 공식 문서: git-scm.com/doc
git --version명령어 트리 (Command Tree)
git ├── git config 사용자 이름·이메일 등 환경 설정 (맨 처음 1회) │ ├── [저장소 시작] │ ├── git init 현재 폴더를 새 Git 저장소로 만들기 │ └── git clone <url> 원격 저장소를 내 컴퓨터로 복제 │ ├── [변경 기록 3단계] │ ├── git status 현재 상태 확인 (무엇이 바뀌었나) │ ├── git add <file> 변경을 스테이징 영역에 올리기 (커밋 후보 선택) │ └── git commit -m "메시지" 스테이징된 변경을 하나의 버전으로 확정·저장 │ ├── [기록 살펴보기] │ ├── git diff 아직 스테이징 안 된 변경 내용 보기 │ ├── git diff --staged 스테이징된 변경 내용 보기 │ └── git log 커밋 이력(과거 버전 목록) 보기 │ └── [무시 목록] └── .gitignore 버전 관리에서 제외할 파일 패턴 (명령이 아닌 파일)
git init으로 시작 → 파일 수정 → git add로 고를 것을 담고 → git commit으로 저장. 이 add → commit 리듬이 Git 사용의 90%입니다.1. 버전 관리란? (Version Control)
💡 배경 개념: 버전 관리가 뭔가요?
버전 관리는 '파일이 시간에 따라 어떻게 바뀌었는지'를 기록해 두었다가, 원하는 시점으로 되돌아갈 수 있게 해 주는 시스템입니다. 비유하자면 게임의 세이브 포인트와 같습니다. 게임을 하다 위험한 구간 앞에서 저장해 두면, 실패해도 그 지점부터 다시 시작할 수 있습니다. 코드도 마찬가지로, 잘 돌아가던 시점에 '저장(커밋)'해 두면 나중에 무언가 망가져도 그 시점으로 안전하게 돌아갈 수 있습니다.
Git은 그 세이브 기능을 코드에 전문적으로 적용한 도구입니다. 보고서_최종.docx, 보고서_최종_진짜최종.docx처럼 파일 이름을 늘려 가며 백업하던 방식을, 하나의 폴더 안에서 깔끔한 '버전 타임라인'으로 대체합니다. 누가·언제·무엇을·왜 바꿨는지가 모두 기록으로 남습니다.
Git을 쓰면 좋은 점
- 되돌리기: 잘못 고쳤을 때 마지막으로 정상이던 버전으로 복구할 수 있습니다.
- 이력 추적: 각 변경에 메시지를 붙여 두어 "이 코드를 왜 이렇게 짰지?"의 답을 남깁니다.
- 실험 안전: 브랜치(별도 작업선)에서 마음껏 시도하고, 실패하면 버리면 됩니다.
- 협업: 여러 사람이 같은 코드를 동시에 고치고 합칠 수 있습니다 (GitHub와 함께).
2. Git의 세 공간 (Working Tree · Staging · Repository)
Git을 처음 배울 때 가장 헷갈리는 부분이 바로 이 '세 개의 공간'입니다. 이 구조만 이해하면 add와 commit이 왜 나뉘어 있는지 단번에 이해됩니다.
| 공간 | 한 줄 설명 | 비유 | 여기로 보내는 명령 |
|---|---|---|---|
| 작업 폴더 (Working Tree) |
지금 내가 파일을 실제로 편집하는 공간. 에디터로 보고 있는 그 폴더입니다. | 작업 책상 위 | (파일 편집) |
| 스테이징 영역 (Staging Area / Index) |
"이번 커밋에 담을 변경"을 골라 모아 두는 대기 공간. | 택배 상자에 담기 | git add |
| 저장소 (Repository) |
커밋으로 영구 보존된 버전들의 창고. 이력이 여기 쌓입니다. | 발송 완료·보관함 | git commit |
add로 로그인 파일만 골라 따로 커밋하면 이력이 깔끔해집니다.파일의 상태 흐름
3. 저장소 시작 (init · clone)
git init — 현재 폴더를 Git 저장소로
현재 폴더 안에 숨김 폴더 .git을 만들어, 그 폴더를 Git이 추적하기 시작합니다. 내 컴퓨터에서 새 프로젝트를 시작할 때 한 번만 실행합니다.
cd ~/projects/my-app # 관리할 폴더로 이동 git init # 이 폴더를 Git 저장소로 초기화 git init -b main # 기본 브랜치 이름을 main으로 지정하며 초기화
.git 폴더가 곧 저장소의 본체입니다. 이 폴더를 지우면 모든 커밋 이력이 사라집니다. 평소엔 건드리지 마세요.git clone <url> — 원격 저장소 복제
GitHub 등에 이미 있는 저장소를 통째로 내 컴퓨터로 내려받습니다. 이력까지 모두 복사되며, 받은 폴더는 곧바로 Git 저장소입니다(init 불필요).
git clone https://github.com/사용자/저장소.git git clone https://github.com/사용자/저장소.git my-folder # 다른 폴더명으로 받기
| 상황 | 쓰는 명령 |
|---|---|
| 내 컴퓨터에서 맨바닥부터 새 프로젝트 시작 | git init |
| 이미 GitHub에 있는 프로젝트를 받아서 시작 | git clone |
4. 변경 기록하기 (add · commit)
git add <경로> — 스테이징에 올리기
작업 폴더의 변경 중 '이번 커밋에 담을 것'을 골라 스테이징 영역에 올립니다. 파일을 처음 추적 대상으로 등록할 때도 add를 씁니다.
git add index.html # 특정 파일 하나 git add src/ # 폴더 전체 git add . # 현재 폴더의 모든 변경 git add -p # 한 파일 안에서도 변경 덩어리별로 골라 담기(고급)
git add .은 편하지만, 의도치 않은 파일(임시·비밀 파일)까지 담길 수 있습니다. git status로 무엇이 담겼는지 확인하는 습관을 들이세요. 제외하고 싶은 파일은 .gitignore에 등록합니다.git commit -m "메시지" — 버전 확정
스테이징된 변경들을 하나의 버전(커밋)으로 묶어 저장소에 영구 기록합니다. 메시지는 '무엇을 왜 바꿨는지'를 나중의 나와 동료가 알 수 있게 적습니다.
git commit -m "로그인 폼 유효성 검사 추가" git commit -am "버튼 색상 수정" # -a: 추적 중인 파일의 변경을 add 없이 바로 커밋 git commit # -m 생략 시 편집기가 열려 여러 줄 메시지 작성
-am은 이미 추적 중인 파일에만 적용되며, 새로 만든 파일은 먼저 git add가 필요합니다.5. 상태 확인 (status · diff · log)
git status — 지금 무슨 일이 일어났나
가장 자주 쓰는 명령입니다. 어떤 파일이 수정·추가·삭제됐는지, 무엇이 스테이징됐는지, 현재 어느 브랜치에 있는지 한눈에 보여줍니다. 막힐 때마다 git status를 치면 다음에 뭘 해야 할지 힌트가 나옵니다.
git status # 자세히 보기 git status -s # 짧게 보기 (한 줄에 한 파일)
git diff — 무엇이 어떻게 바뀌었나
실제 코드의 변경 내용(추가된 줄·삭제된 줄)을 보여줍니다. 커밋 전에 '내가 무엇을 바꿨는지' 검토할 때 씁니다.
| 명령 | 보여 주는 것 |
|---|---|
git diff | 작업 폴더의 변경 중 아직 add 안 한 부분 |
git diff --staged | add는 했지만 commit 안 한 부분 (별칭 --cached) |
git diff HEAD | 마지막 커밋 대비 모든 변경 (스테이징 포함) |
git log — 커밋 이력 보기
지금까지 쌓인 커밋 목록을 최신순으로 보여줍니다. 각 커밋의 고유 ID(해시), 작성자, 날짜, 메시지가 나옵니다.
git log # 전체 이력 (q 키로 빠져나옴) git log --oneline # 커밋당 한 줄로 간략히 git log --oneline --graph # 브랜치 갈래를 그래프로 git log -3 # 최근 3개만
git log가 길게 나와 멈춘 듯 보이면 화면을 넘기는 중입니다. 스페이스로 다음 쪽, q로 빠져나옵니다.6. .gitignore — 버전 관리에서 제외하기
모든 파일을 추적할 필요는 없습니다. 빌드 결과물, 설치된 패키지(node_modules), 비밀 키, OS가 만드는 잡파일(.DS_Store)은 저장소에 넣지 않는 게 좋습니다. 저장소 루트에 .gitignore라는 텍스트 파일을 만들고, 제외할 패턴을 한 줄에 하나씩 적습니다.
# .gitignore 예시 node_modules/ # 폴더 전체 무시 *.log # 모든 .log 파일 .env # 환경변수·비밀 파일 .DS_Store # macOS 잡파일 build/ # 빌드 산출물 !important.log # 앞의 *.log 규칙에서 이것만 예외로 추적
| 패턴 | 의미 |
|---|---|
이름 | 해당 이름의 파일·폴더 무시 |
폴더/ | 그 폴더 전체 무시 |
*.확장자 | 해당 확장자 파일 모두 무시 |
!패턴 | 앞서 무시한 것 중 이것만 예외(추적) |
.gitignore는 아직 추적 안 된 파일에만 적용됩니다. 이미 커밋해 버린 파일은 .gitignore에 넣어도 계속 추적됩니다. 이 경우 git rm --cached <파일>로 추적만 해제한 뒤 커밋해야 합니다.7. 초기 설정 (config)
Git을 설치하고 처음 한 번, 커밋에 기록될 내 이름과 이메일을 설정해야 합니다. 이 정보는 모든 커밋에 '작성자'로 남습니다.
git config --global user.name "Hong Gildong" git config --global user.email "you@example.com" git config --global init.defaultBranch main # 새 저장소 기본 브랜치를 main으로 git config --list # 현재 설정 확인
| 범위 플래그 | 적용 범위 |
|---|---|
--global | 이 컴퓨터의 내 모든 저장소 (보통 이걸 씁니다) |
--local (기본) | 현재 저장소 하나에만 |
--system | 컴퓨터의 모든 사용자 |
user.email을 GitHub 계정 이메일과 맞추세요. 그래야 커밋이 내 GitHub 활동으로 연결됩니다.참고 링크
Git 2.54.0 기준 · 한국어 교육 자료 · 문서 수집일 2026년 6월 13일
공식 문서: git-scm.com/doc