Git 기초 매뉴얼

내 컴퓨터에서 코드의 변경 이력을 기록하고 되돌리는 핵심 명령어 모음  |  공식 문서: git-scm.com/doc

대상 Git 버전2.40 이상 (최신 안정판 2.54.0 기준)
문서 수집일2026년 6월 13일
버전 확인 방법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을 쓰면 좋은 점

📌 Git과 GitHub는 다릅니다. Git은 내 컴퓨터에서 도는 '버전 관리 프로그램'이고, GitHub는 그 Git 저장소를 인터넷에 올려 공유·협업하는 '웹 서비스'입니다. 이 문서는 먼저 내 컴퓨터 안의 Git만 다룹니다. GitHub는 ③ 협업 섹션에서 배웁니다.

2. Git의 세 공간 (Working Tree · Staging · Repository)

Git을 처음 배울 때 가장 헷갈리는 부분이 바로 이 '세 개의 공간'입니다. 이 구조만 이해하면 addcommit이 왜 나뉘어 있는지 단번에 이해됩니다.

공간한 줄 설명비유여기로 보내는 명령
작업 폴더
(Working Tree)
지금 내가 파일을 실제로 편집하는 공간. 에디터로 보고 있는 그 폴더입니다. 작업 책상 위 (파일 편집)
스테이징 영역
(Staging Area / Index)
"이번 커밋에 담을 변경"을 골라 모아 두는 대기 공간. 택배 상자에 담기 git add
저장소
(Repository)
커밋으로 영구 보존된 버전들의 창고. 이력이 여기 쌓입니다. 발송 완료·보관함 git commit
💡 왜 add와 commit이 따로 있나요? 한 번에 수정한 여러 파일 중 관련 있는 것만 골라 하나의 의미 있는 버전으로 묶기 위해서입니다. 예를 들어 '로그인 기능'과 '오타 수정'을 같이 작업했어도, add로 로그인 파일만 골라 따로 커밋하면 이력이 깔끔해집니다.

파일의 상태 흐름

작업 폴더 Working Tree 에디터로 편집하는 폴더 스테이징 Index · 커밋 대기 담아 둔 변경 저장소 Repository 버전 영구 보존 · 이력 git add git commit git restore git reset --soft 초록 실선 = 앞으로 저장하기  ·  빨강 점선 = 뒤로 되돌리기 git status 표기: "Changes not staged"(작업 폴더) · "Changes to be committed"(스테이징)

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 생략 시 편집기가 열려 여러 줄 메시지 작성
📝 좋은 커밋 메시지: 현재형 동사로 간결하게. "수정함"(X) → "로그인 실패 시 에러 메시지 표시"(O). 한 커밋엔 한 가지 주제만 담으면 이력을 읽기 쉽습니다. -am이미 추적 중인 파일에만 적용되며, 새로 만든 파일은 먼저 git add가 필요합니다.

5. 상태 확인 (status · diff · log)

git status — 지금 무슨 일이 일어났나

가장 자주 쓰는 명령입니다. 어떤 파일이 수정·추가·삭제됐는지, 무엇이 스테이징됐는지, 현재 어느 브랜치에 있는지 한눈에 보여줍니다. 막힐 때마다 git status를 치면 다음에 뭘 해야 할지 힌트가 나옵니다.

git status            # 자세히 보기
git status -s         # 짧게 보기 (한 줄에 한 파일)

git diff — 무엇이 어떻게 바뀌었나

실제 코드의 변경 내용(추가된 줄·삭제된 줄)을 보여줍니다. 커밋 전에 '내가 무엇을 바꿨는지' 검토할 때 씁니다.

명령보여 주는 것
git diff작업 폴더의 변경 중 아직 add 안 한 부분
git diff --stagedadd는 했지만 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컴퓨터의 모든 사용자
💡 GitHub에 올릴 거라면 user.email을 GitHub 계정 이메일과 맞추세요. 그래야 커밋이 내 GitHub 활동으로 연결됩니다.

참고 링크


Git 2.54.0 기준 · 한국어 교육 자료 · 문서 수집일 2026년 6월 13일
공식 문서: git-scm.com/doc