부록 — 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 &lt;commit&gt;" --> 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) 발생같은 부분을 양쪽이 수정파일 편집 → addcommit
reset --hard로 커밋 날림실수git reflog → 해당 커밋으로 복귀
태그가 GitHub에 안 보임태그는 자동 push 안 됨git push origin --tags
한 일을 다 망친 것 같음패닉 😱침착하게 git status, git reflog 먼저
🆘 만능 진정제: 막히면 일단 git status. Git은 거의 항상 "지금 무슨 상황이고 어떻게 해결하라"는 안내를 출력합니다. 그 안내문을 읽는 것이 최고의 해결책입니다.

E. 안전 수칙 (반드시 지킬 것)

  1. 공유(push)한 커밋은 reset/rebase/--amend 금지 → 대신 revert 사용
  2. reset --hardgit clean 전에는 git status로 확인 → 커밋 안 한 변경은 복구 불가
  3. --force push 대신 --force-with-lease → 그래도 협업 브랜치엔 가급적 사용 금지
  4. .gitignore로 비밀키·node_modules 제외 → 한번 push된 비밀번호는 영원히 남는다
  5. 커밋은 작고 의미 있게, 메시지는 구체적으로
  6. 헷갈리면 백업 브랜치: 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되돌림 커밋을 추가(역사 보존)
ReflogHEAD 이동 기록(복구용 블랙박스)
Upstream로컬 브랜치가 추적하는 원격 브랜치
Pull Request변경을 메인에 합쳐달라는 리뷰 요청(GitHub)
Detached HEAD브랜치가 아닌 커밋에 직접 올라간 상태
GitHub CLI (gh)GitHub 기능을 터미널에서 다루는 공식 도구
CI (지속적 통합)변경마다 자동으로 빌드·테스트하는 것
CD (지속적 배포)검증된 코드를 자동으로 배포하는 것
WorkflowActions의 자동화를 정의한 YAML 파일
Job / Step워크플로우 안의 작업 단위 / 그 하위 단계
Runner잡이 실제로 실행되는 가상 서버
SecretActions에서 안전하게 쓰는 민감 정보 저장소
Blob / Tree / CommitGit의 3대 객체: 파일내용 / 디렉터리 / 스냅샷
SHA-1Git이 객체 식별에 쓰는 40자리 해시(미래는 SHA-256)
Fork남의 저장소를 내 계정으로 복사
upstream포크의 원본 저장소를 가리키는 원격
cherry-pick특정 커밋만 골라 현재 브랜치에 복사
Squash여러 커밋을 하나로 합치기
Git Hook커밋/푸시 등 특정 시점에 자동 실행되는 스크립트
husky훅을 팀과 공유 가능하게 해주는 도구
GitHub Pages정적 파일을 무료로 웹 호스팅하는 서비스
Collaborator저장소에 직접 push 권한을 가진 협업자
Protected BranchPR·승인·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년)