부록 — Git 치트시트 & 종합 정리
본문 11개 섹션을 한 장으로 압축한 참조 자료입니다. 책상 옆에 두고 막힐 때마다 펼쳐보세요.
A. 명령어 빠른 참조 (Cheat Sheet)
설정 (Setup)
BASH
git config --global user.name "이름" git config --global user.email "메일" git config --global init.defaultBranch main git config --list # 설정 확인
시작하기 (Create)
BASH
git init # 새 저장소 생성 git clone <url> # 기존 저장소 복제
기본 작업 (Basic Workflow)
BASH
git status # 상태 확인 (가장 자주!) git add <file> # 스테이지에 담기 git add . # 전체 담기 git commit -m "메시지" # 커밋 git commit -am "메시지" # add+commit (추적 파일만) git log --oneline --graph --all # 이력 보기 git diff # 변경 비교
되돌리기 (Undo)
BASH
git restore <file> # 워킹 변경 버리기 git restore --staged <file> # 스테이지에서 내리기 git commit --amend # 마지막 커밋 수정 git reset --soft HEAD~1 # 커밋만 취소(변경 유지) git reset HEAD~1 # 커밋+add 취소(변경 유지) git reset --hard HEAD~1 # 전부 폐기 ⚠️ git revert <commit> # 되돌림 커밋 추가(안전) git reflog # 잃어버린 커밋 찾기
브랜치 (Branch)
BASH
git branch # 목록 git switch -c <name> # 생성+이동 git switch <name> # 이동 git switch - # 직전 브랜치로 git branch -d <name> # 안전 삭제 git branch -D <name> # 강제 삭제
합치기 (Merge / Rebase)
BASH
git merge <branch> # 병합 (받을 쪽에서 실행) git merge --abort # 병합 취소 git rebase <branch> # 리베이스 (옮길 쪽에서 실행) git rebase --continue # 충돌 해결 후 진행 git rebase --abort # 리베이스 취소 git rebase -i HEAD~3 # 대화형(커밋 정리)
원격 (Remote)
BASH
git remote add origin <url> # 원격 연결 git remote -v # 원격 확인 git push -u origin main # 첫 push(업스트림 설정) git push # 올리기 git pull # 받고 합치기 git fetch # 받기만 git push origin --delete <branch> # 원격 브랜치 삭제
스태시 (Stash)
BASH
git stash push -m "메모" # 임시 저장 git stash list # 목록 git stash pop # 꺼내고 삭제 git stash apply # 꺼내고 남김 git stash drop / clear # 삭제 / 전체 삭제
태그 (Tag)
BASH
git tag -a v1.0.0 -m "릴리스" # annotated 태그 git tag # 목록 git push origin v1.0.0 # 태그 올리기 (별도!) git push origin --tags # 모든 태그 올리기 git tag -d v1.0.0 # 로컬 삭제 git push origin --delete v1.0.0 # 원격 삭제
GitHub CLI (gh) — GitHub 기능
BASH
gh auth login # 인증 gh repo create <name> --source=. --push # 저장소 생성+연결+push gh repo clone OWNER/REPO # 복제 gh pr create --fill # PR 생성(커밋으로 자동 채움) gh pr checkout <번호> # PR을 로컬로 받아 리뷰 gh pr merge --squash --delete-branch # PR 병합 gh issue create / list / view / close # 이슈 관리 gh release create v1.0.0 --generate-notes # 릴리스 발행 gh run list / view / watch # Actions 실행 확인 gh alias set <별칭> "<명령>" # 단축 명령
CI/CD (GitHub Actions)
YAML
# .github/workflows/ci.yml name: CI on: push: { branches: [main] } pull_request: { branches: [main] } jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # 코드 받기(거의 항상 첫 스텝) - uses: actions/setup-node@v4 with: { node-version: "20", cache: "npm" } - run: npm ci # 의존성 설치 - run: npm test # 테스트
- 파일 위치:
.github/workflows/*.yml uses=액션 호출,run=셸 명령- 비밀값:
${{ secrets.이름 }}(Settings→Secrets에 등록, 코드에 직접 금지) matrix=다중 환경 병렬,needs=잡 순서 연결
내부 원리 (저수준 명령)
BASH
git hash-object -w <file> # 내용을 blob으로 저장 git cat-file -t <해시> # 객체 타입 (blob/tree/commit) git cat-file -p <해시> # 객체 내용 보기 git cat-file -p HEAD # 최신 커밋 객체 들여다보기 git ls-files -s # 스테이지(index) 내용 cat .git/HEAD # 현재 브랜치 포인터 확인
셸 기초
BASH
pwd / ls -la / cd <경로> # 위치/목록/이동 mkdir -p a/b/c # 중첩 폴더 생성 touch file / cp / mv / rm # 파일 생성/복사/이동/삭제 cat / head / tail -f / less # 내용 보기 grep -rn "검색어" . # 재귀 검색 echo "x" > f (덮어쓰기) / >> (이어쓰기)
고급 명령
BASH
git cherry-pick <해시> # 특정 커밋만 골라 복사 git commit --amend --no-edit # 마지막 커밋에 파일 추가 git rebase -i HEAD~3 # 커밋 정리(squash/fixup/reword) git switch -c new <해시> # detached HEAD 실험 안착 git log --pretty=format:"%h %an %s" # 커스텀 로그 포맷 git shortlog -sn # 작성자별 기여도 git config --global alias.lg "log --oneline --graph --all" # git lg 별칭
포크 협업
BASH
git remote add upstream <원본URL> # 원본을 upstream으로 등록 git fetch upstream # 원본 변경 가져오기 git merge upstream/main # 내 브랜치에 병합 git push origin main # 내 포크에 반영
Git 훅 (husky)
BASH
npm install --save-dev husky npx husky init # .husky/ + prepare 스크립트 # .husky/pre-commit 에 검사 명령 작성 (예: npx lint-staged) git commit --no-verify # 훅 건너뛰기(비상용)
- 네이티브 훅(
.git/hooks/)은 push 안 됨 → husky로 팀 공유 exit 0=통과, 비0=중단
GitHub Pages
BASH
# 정적: Settings→Pages→Source 브랜치 지정 # React: package.json에 "homepage" + "deploy": "gh-pages -d dist" npm run deploy # SSH 전환 (인증 오류 시) git remote set-url origin git@github.com:사용자명/저장소.git
B. 핵심 그림 — Git의 4영역과 명령어
flowchart LR
WD["🖥️ 워킹 디렉터리"]
SA["📦 스테이지"]
LR["🗄️ 로컬 저장소"]
RR["☁️ 원격 저장소"]
WD -- "git add" --> SA
SA -- "git commit" --> LR
LR -- "git push" --> RR
RR -- "git fetch" --> LR
RR -- "git pull" --> WD
LR -- "git merge / checkout <commit>" --> WD
SA -- "git restore --staged" --> WD
LR -. "git restore" .-> WD
classDef work fill:#fef3c7,stroke:#d97706,color:#92400e
classDef stage fill:#dbeafe,stroke:#2563eb,color:#1e40af
classDef local fill:#dcfce7,stroke:#16a34a,color:#166534
classDef remote fill:#f3e8ff,stroke:#9333ea,color:#6b21a8
class WD work
class SA stage
class LR local
class RR remote
C. 표준 협업 워크플로우 (Feature Branch)
가장 널리 쓰이는 팀 협업 방식입니다.
BASH
# 1. 최신 main 받기 git switch main git pull # 2. 기능 브랜치 생성 git switch -c feature/my-task # 3. 작업 & 커밋 (여러 번) git add . git commit -m "Implement my task" # 4. 원격에 올리기 git push -u origin feature/my-task # 5. GitHub에서 Pull Request(PR) 생성 → 코드 리뷰 → 승인 # 6. main에 병합 (보통 GitHub에서 Merge 버튼) # 7. 로컬 정리 git switch main git pull git branch -d feature/my-task
💡 팁
Pull Request(PR)란? "내 브랜치를 main에 합쳐주세요"라고 요청하는 GitHub의 기능입니다. 동료가 변경을 검토(리뷰)하고 승인한 뒤 병합하므로, 코드 품질을 지키는 협업의 핵심입니다.D. 트러블슈팅 — 상황별 해결법
| 증상 | 원인 | 해결 |
|---|---|---|
push가 (fetch first)로 거부됨 | 원격에 내가 모르는 커밋이 있음 | git pull 후 다시 git push |
| 브랜치 전환이 막힘 | 커밋 안 한 변경 존재 | 커밋하거나 git stash |
please tell me who you are | 사용자 정보 미설정 | git config --global user.name/email |
| vi 에디터에 갇힘 | 커밋 메시지 편집기 | Esc → :wq (저장) / :q! (취소) |
| 충돌(CONFLICT) 발생 | 같은 부분을 양쪽이 수정 | 파일 편집 → add → commit |
reset --hard로 커밋 날림 | 실수 | git reflog → 해당 커밋으로 복귀 |
| 태그가 GitHub에 안 보임 | 태그는 자동 push 안 됨 | git push origin --tags |
| 한 일을 다 망친 것 같음 | 패닉 😱 | 침착하게 git status, git reflog 먼저 |
🆘 만능 진정제: 막히면 일단 git status. Git은 거의 항상 "지금 무슨 상황이고 어떻게 해결하라"는 안내를 출력합니다. 그 안내문을 읽는 것이 최고의 해결책입니다.
E. 안전 수칙 (반드시 지킬 것)
- 공유(push)한 커밋은
reset/rebase/--amend금지 → 대신revert사용 reset --hard와git clean전에는git status로 확인 → 커밋 안 한 변경은 복구 불가--forcepush 대신--force-with-lease→ 그래도 협업 브랜치엔 가급적 사용 금지.gitignore로 비밀키·node_modules제외 → 한번 push된 비밀번호는 영원히 남는다- 커밋은 작고 의미 있게, 메시지는 구체적으로
- 헷갈리면 백업 브랜치:
git switch -c backup
F. 용어집 (Glossary)
| 용어 | 뜻 |
|---|---|
| Repository (저장소) | Git이 버전을 관리하는 프로젝트 공간 |
| Working Directory | 실제로 파일을 보고 수정하는 작업 공간 |
| Staging Area (Index) | 커밋할 변경을 모아두는 대기실(장바구니) |
| Commit | 변경 사항을 저장소에 기록한 스냅샷 |
| HEAD | 현재 위치(보통 최신 커밋)를 가리키는 포인터 |
| Branch | 특정 커밋을 가리키는 가벼운 이동형 포인터 |
| Tag | 특정 커밋에 고정되는 이정표(버전 표시) |
| Remote | 인터넷 서버의 원격 저장소(origin 등) |
| Merge | 갈라진 브랜치를 합치기 |
| Rebase | 브랜치의 출발점을 옮겨 이력 정리 |
| Conflict | 양쪽이 같은 부분을 수정해 자동 병합 불가한 상태 |
| Fast-forward | 포인터만 전진하는 단순 병합 |
| Stash | 작업을 임시로 치워두는 서랍 |
| Reset | 커밋을 되감아 취소(역사 변경) |
| Revert | 되돌림 커밋을 추가(역사 보존) |
| Reflog | HEAD 이동 기록(복구용 블랙박스) |
| Upstream | 로컬 브랜치가 추적하는 원격 브랜치 |
| Pull Request | 변경을 메인에 합쳐달라는 리뷰 요청(GitHub) |
| Detached HEAD | 브랜치가 아닌 커밋에 직접 올라간 상태 |
| GitHub CLI (gh) | GitHub 기능을 터미널에서 다루는 공식 도구 |
| CI (지속적 통합) | 변경마다 자동으로 빌드·테스트하는 것 |
| CD (지속적 배포) | 검증된 코드를 자동으로 배포하는 것 |
| Workflow | Actions의 자동화를 정의한 YAML 파일 |
| Job / Step | 워크플로우 안의 작업 단위 / 그 하위 단계 |
| Runner | 잡이 실제로 실행되는 가상 서버 |
| Secret | Actions에서 안전하게 쓰는 민감 정보 저장소 |
| Blob / Tree / Commit | Git의 3대 객체: 파일내용 / 디렉터리 / 스냅샷 |
| SHA-1 | Git이 객체 식별에 쓰는 40자리 해시(미래는 SHA-256) |
| Fork | 남의 저장소를 내 계정으로 복사 |
| upstream | 포크의 원본 저장소를 가리키는 원격 |
| cherry-pick | 특정 커밋만 골라 현재 브랜치에 복사 |
| Squash | 여러 커밋을 하나로 합치기 |
| Git Hook | 커밋/푸시 등 특정 시점에 자동 실행되는 스크립트 |
| husky | 훅을 팀과 공유 가능하게 해주는 도구 |
| GitHub Pages | 정적 파일을 무료로 웹 호스팅하는 서비스 |
| Collaborator | 저장소에 직접 push 권한을 가진 협업자 |
| Protected Branch | PR·승인·CI 통과를 강제하는 보호 규칙이 걸린 브랜치 |
G. 더 배우려면 (공식 자료)
- Pro Git (무료 전자책, 한국어 번역 제공): https://git-scm.com/book/ko/v2
- Git 공식 문서: https://git-scm.com/docs
- GitHub 공식 가이드/Skills: https://skills.github.com
- gitignore 템플릿 모음: https://github.com/github/gitignore
- 인터랙티브 학습(시각화): https://learngitbranching.js.org
🎓 마지막 조언: Git은 머리로 외우는 게 아니라 손으로 익히는 도구입니다. 연습용 저장소(git-practice)를 하나 만들어 이 책의 모든 명령을 직접 쳐보세요. 충돌도 일부러 만들어 해결해보고,reset으로 날린 커밋을reflog로 살려보세요. 두려움 없이 실험할 수 있게 되면, 그때 Git이 진짜 내 도구가 됩니다.
본 안내도서는 Git 공식 문서(git-scm.com), Pro Git(Scott Chacon & Ben Straub), GitHub 공식 가이드를 참고하여 초급 개발자를 위해 작성되었습니다. (Git 2.54.0 기준, 2026년)