Skip to content

단순 명령어 암기를 넘어, Git의 내부 동작 원리부터 복잡한 실전 시나리오까지

License

Notifications You must be signed in to change notification settings

dev-book-lab/git-in-depth

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 Git In-Depth

실전 Git 완전 정복 - 복잡한 시나리오까지


"단순 명령어 암기를 넘어, Git의 내부 동작 원리부터 복잡한 실전 시나리오까지"

기초부터 고급 테크닉까지,
왜 이렇게 동작하는지 원리부터 파헤치는 Git 심화 학습 자료


GitHub Git Topics License


🎯 이 프로젝트에 대하여

단순한 명령어 나열이 아닌, 실전에서 바로 적용할 수 있는 Git 완전 가이드입니다.

✨ 특징

🔍 원리 중심 💻 실전 시나리오 🔥 복잡한 상황 📊 트러블슈팅
Git 내부 구조부터
확실하게
실무에서 자주
겪는 상황들
Merge 충돌,
Rebase 실수 등
문제 해결
완벽 가이드
  • 18개 주요 토픽 - Git 기초부터 고급 테크닉까지
  • 실전 시나리오 - 복잡한 Merge 충돌, Rebase 실수 복구 등
  • 내부 원리 이해 - .git 디렉토리, 객체 모델 완전 분석
  • 팀 워크플로우 - Git Flow, GitHub Flow, Trunk-Based 등
  • 트러블슈팅 - 실전 문제 해결 가이드

📚 목차

💡 각 챕터를 클릭하면 상세한 학습 문서로 이동합니다

🔹 Git 기초 다지기 (Fundamentals)

"제대로 이해하고 시작하자"

Topic 핵심 내용 난이도
1.1 객체 모델 Blob, Tree, Commit, Tag / SHA-1 해시 / .git 디렉토리 분석 ⭐⭐
1.2 3가지 영역 Working Directory, Staging Area, Repository / git status 완벽 이해
1.3 HEAD와 참조 HEAD의 의미 / Detached HEAD / 브랜치의 본질 (포인터) ⭐⭐
1.4 커밋 해부하기 커밋 구조 / Conventional Commits / --amend, --fixup ⭐⭐

🔹 브랜치 전략 (Branching Strategies)

"팀 워크플로우 마스터"

Topic 핵심 내용 난이도
2.1 브랜치 기본 git branch, switch, checkout / Fast-forward vs 3-way merge
2.2 Git Flow master, develop, feature, release, hotfix / 장단점 ⭐⭐
2.3 GitHub Flow Pull Request 중심 / 빠른 배포 전략 ⭐⭐
2.4 Trunk-Based Dev Feature Flags / CI/CD 통합 ⭐⭐⭐
2.5 Release 관리 멀티 버전 지원 / Backport 전략 ⭐⭐⭐

🔹 Merge의 모든 것 (Merge Mastery)

"충돌 없는 협업의 핵심"

Topic 핵심 내용 난이도
3.1 Merge 타입 Fast-forward vs 3-way merge / --no-ff 옵션 ⭐⭐
3.2 충돌의 원리 충돌 마커 해석 / git diff 분석 ⭐⭐
3.3 복잡한 충돌 바이너리 충돌 / 삭제된 파일 / 3-way 충돌 ⭐⭐⭐
3.4 Merge 전략 recursive, ours, theirs, octopus, subtree ⭐⭐⭐
3.5 Merge Tools VS Code, IntelliJ, KDiff3 / 3-way diff ⭐⭐
3.6 장기 브랜치 통합 수개월 분리된 브랜치 merge / 충돌 최소화 ⭐⭐⭐

🔹 Rebase의 모든 것 (Rebase Mastery)

"커밋 히스토리를 깔끔하게"

Topic 핵심 내용 난이도
4.1 Rebase 기초 Rebase vs Merge / Golden Rule / Fast-forward ⭐⭐
4.2 Interactive Rebase pick, reword, squash, fixup, drop / 커밋 정리 ⭐⭐⭐
4.3 Rebase onto 브랜치 base 변경 / 복잡한 브랜치 정리 ⭐⭐⭐
4.4 Rebase 충돌 연속 충돌 처리 / 50개 커밋 rebase ⭐⭐⭐
4.5 Rebase 복구 git reflog / ORIG_HEAD / Force push 복구 ⭐⭐⭐

🔹 Reset, Restore, Revert (복구의 기술)

"실수를 되돌리는 모든 방법"

Topic 핵심 내용 난이도
5.1 Reset 모드 --soft, --mixed, --hard / 언제 어떤 모드? ⭐⭐
5.2 Reset 시나리오 커밋 취소 / unstage / Remote push 후 ⭐⭐⭐
5.3 Restore Restore vs Reset / Working Directory 복구 ⭐⭐
5.4 Revert 안전한 되돌리기 / Merge commit revert ⭐⭐
5.5 Reflog 삭제된 커밋/브랜치 복구 / git fsck ⭐⭐⭐

🔹 Stash의 모든 것 (임시 저장)

"작업 중 전환의 기술"

Topic 핵심 내용 난이도
6.1 Stash 기초 stash, pop, apply / Untracked 포함
6.2 Stash 관리 여러 Stash 관리 / Stash 브랜치 ⭐⭐
6.3 Stash 충돌 pop 실패 시 / 부분 적용 ⭐⭐

🔹 Cherry-pick의 기술

"선택적 커밋 적용"

Topic 핵심 내용 난이도
7.1 Cherry-pick 기초 단일/여러 커밋 / 충돌 해결 ⭐⭐
7.2 고급 Cherry-pick Hotfix 여러 브랜치 적용 / 릴리스 관리 ⭐⭐⭐

🔹 Remote 관리 (원격 저장소)

"협업의 핵심"

Topic 핵심 내용 난이도
8.1 Remote 기초 remote add / Origin의 의미
8.2 Push --force vs --force-with-lease / Upstream ⭐⭐
8.3 Pull Pull = Fetch + Merge / --rebase 옵션 ⭐⭐
8.4 Fetch와 Tracking Remote tracking branch / fetch --prune ⭐⭐
8.5 여러 Remote Fork 워크플로우 / 오픈소스 기여 ⭐⭐⭐

🔹 서브모듈과 서브트리

"프로젝트 안의 프로젝트"

Topic 핵심 내용 난이도
9.1 Submodule 기초 Submodule 추가/업데이트 / .gitmodules ⭐⭐
9.2 Submodule 고급 중첩 Submodule / 제거 ⭐⭐⭐
9.3 Subtree Subtree vs Submodule / 모노레포 ⭐⭐⭐

🔹 Tag 관리 (버전 관리)

"릴리스 버전 관리"

Topic 핵심 내용 난이도
10.1 Tag 기초 Lightweight vs Annotated / Semantic Versioning
10.2 Tag 관리 Tag 이동/수정 / 버전 관리 전략 ⭐⭐

🔹 Hooks (자동화)

"Git 워크플로우 자동화"

Topic 핵심 내용 난이도
11.1 Client Hooks pre-commit, commit-msg, pre-push ⭐⭐
11.2 Server Hooks pre-receive, post-receive / 자동 배포 ⭐⭐⭐
11.3 Husky Git Hooks 관리 / lint-staged ⭐⭐

🔹 대용량 파일 (LFS)

"Git LFS 완전 정복"

Topic 핵심 내용 난이도
12.1 LFS 기초 LFS 설치/설정 / .gitattributes ⭐⭐
12.2 LFS 관리 LFS 마이그레이션 / 기존 프로젝트 전환 ⭐⭐⭐

🔹 로그와 검색 (History & Search)

"커밋 히스토리 탐색"

Topic 핵심 내용 난이도
13.1 Git Log --graph, --grep, Custom format ⭐⭐
13.2 Blame과 Bisect 코드 작성자 추적 / 버그 원인 찾기 ⭐⭐⭐
13.3 Git Grep 코드/히스토리 검색 ⭐⭐

🔹 성능 최적화 (Performance)

"대규모 레포지토리 관리"

Topic 핵심 내용 난이도
14.1 GC와 Prune Garbage Collection / 레포 크기 줄이기 ⭐⭐
14.2 Shallow/Partial Clone --depth / Sparse Checkout / 모노레포 최적화 ⭐⭐⭐

🔹 Git 워크플로우 (Workflows)

"팀별 Git 전략"

Topic 핵심 내용 난이도
15.1 Centralized 중앙 집중식 워크플로우
15.2 Feature Branch 기능 브랜치 워크플로우 ⭐⭐
15.3 Forking Fork 워크플로우 / 오픈소스 ⭐⭐
15.4 스타트업 스타트업 Git 전략 ⭐⭐
15.5 대기업 대기업 Git 전략 ⭐⭐⭐
15.6 오픈소스 오픈소스 Git 전략 ⭐⭐⭐

🔹 트러블슈팅 (Troubleshooting)

"실전 문제 해결"

Topic 핵심 내용 난이도
16.1 Push Rejected Push 거부 해결 ⭐⭐
16.2 Detached HEAD Detached HEAD 복구 ⭐⭐
16.3 Conflict Hell 복잡한 충돌 지옥 탈출 ⭐⭐⭐
16.4 손상된 레포 손상된 레포지토리 복구 ⭐⭐⭐
16.5 대규모 리팩토링 대규모 리팩토링 merge ⭐⭐⭐
16.6 히스토리 재작성 히스토리 재작성 후 협업 ⭐⭐⭐

🔹 팁과 트릭 (Tips & Tricks)

"생산성 극대화"

Topic 핵심 내용 난이도
17.1 Git Alias 유용한 Alias 50개
17.2 Git Config 추천 설정 / Global vs Local
17.3 Worktree 동시에 여러 브랜치 작업 ⭐⭐
17.4 Sparse Checkout 일부 파일만 체크아웃 / 모노레포 ⭐⭐⭐

🔹 실전 프로젝트 (Hands-on Projects)

"직접 해보는 복잡한 시나리오"

Topic 핵심 내용 난이도
18.1 대규모 리팩토링 시나리오 + 해결 과정 ⭐⭐⭐
18.2 멀티 릴리스 시나리오 + 해결 과정 ⭐⭐⭐
18.3 Monorepo 마이그레이션 시나리오 + 해결 과정 ⭐⭐⭐


🗺️ 학습 로드맵

🎯 목적별 학습 경로

📘 입문자 (Git 처음 배우는 분)

1주차: Git 기초 완벽 이해

✅ 1.1 객체 모델 - Git의 내부 구조
✅ 1.2 3가지 영역 - Working Directory, Staging, Repository
✅ 1.3 HEAD와 참조 - 브랜치의 본질
✅ 2.1 브랜치 기본 - 생성과 전환

2주차: 브랜치와 Merge

✅ 3.1 Merge 타입 - Fast-forward vs 3-way
✅ 3.2 충돌의 원리 - 충돌 마커 이해
✅ 6.1 Stash 기초 - 작업 임시 저장
✅ 8.1 Remote 기초 - 원격 저장소

3주차: 실전 워크플로우

✅ 2.2 Git Flow - 브랜치 전략
✅ 8.2 Push - 원격 저장소에 올리기
✅ 8.3 Pull - 원격 저장소에서 받기
✅ 10.1 Tag 기초 - 버전 관리

4주차: 복구와 트러블슈팅

✅ 5.1 Reset 모드 - 실수 되돌리기
✅ 5.4 Revert - 안전한 되돌리기
✅ 16.1 Push Rejected - 자주 발생하는 문제
✅ 실전 프로젝트 연습
💼 실무자 (팀 프로젝트 진행 중)

Week 1: 핵심 Git 기술

✅ 3장: Merge의 모든 것 (충돌 해결 완벽 정복)
✅ 4장: Rebase의 모든 것 (히스토리 정리)
✅ 5장: Reset, Restore, Revert (복구 기술)

Week 2: 팀 워크플로우

✅ 2장: 브랜치 전략 (Git Flow, GitHub Flow)
✅ 8장: Remote 관리 (협업 필수)
✅ 15장: Git 워크플로우 (팀 전략)

Week 3: 고급 기술

✅ 7장: Cherry-pick (선택적 커밋 적용)
✅ 11장: Hooks (자동화)
✅ 13장: 로그와 검색 (히스토리 탐색)

Week 4: 트러블슈팅

✅ 16장: 트러블슈팅 (실전 문제 해결)
✅ 18장: 실전 프로젝트 (복잡한 시나리오)
✅ 17장: 팁과 트릭 (생산성 극대화)
🏆 면접 준비

우선순위 1 (필수):

✅ Git 내부 구조 - 객체 모델, HEAD, 참조
✅ Merge vs Rebase 차이와 적용 시기
✅ Reset --soft vs --mixed vs --hard
✅ Fast-forward vs 3-way merge

우선순위 2 (중요):

✅ 브랜치 전략 (Git Flow, GitHub Flow 차이)
✅ 충돌 해결 방법
✅ Rebase 위험성과 Golden Rule
✅ Force push vs Force-with-lease

우선순위 3 (심화):

✅ Interactive Rebase 활용
✅ Reflog로 실수 복구
✅ Cherry-pick 활용 시나리오
✅ Submodule vs Subtree
🚀 고급자 (Git 마스터 지향)

Phase 1: Git 내부 완벽 이해

✅ 1장: Git 기초 (객체 모델부터)
✅ 13장: 로그와 검색 (히스토리 분석)
✅ 14장: 성능 최적화 (대규모 레포)
✅ 부록: Pack Files, Delta Compression

Phase 2: 고급 테크닉

✅ 4장: Rebase 완전 정복
✅ 9장: Submodule과 Subtree
✅ 12장: Git LFS
✅ 17장: Worktree, Sparse Checkout

Phase 3: 팀 리딩

✅ 15장: 워크플로우 전략
✅ 11장: Hooks 자동화
✅ 16장: 트러블슈팅
✅ 18장: 실전 프로젝트

Phase 4: 전문가 레벨

✅ 복잡한 Merge 시나리오 마스터
✅ 히스토리 재작성 후 협업 전략
✅ 대규모 모노레포 관리
✅ 커스텀 Git 워크플로우 설계
⚡ 빠른 복습 (경력 개발자)

Day 1: 핵심 명령어

✅ Merge vs Rebase 차이
✅ Reset vs Restore vs Revert
✅ Cherry-pick 활용
✅ Stash 관리

Day 2: 고급 기술

✅ Interactive Rebase
✅ Reflog 복구
✅ Force push 안전하게
✅ 복잡한 충돌 해결

Day 3: 팀 워크플로우

✅ Git Flow vs GitHub Flow
✅ Remote 관리
✅ Hooks 자동화
✅ 트러블슈팅

🎓 학습 방법

📖 Read → 💻 Practice → 🤔 Think → 📝 Review → 🔁 Repeat

1️⃣ 원리부터 이해

Git 명령어 암기 ❌
내부 동작 원리 이해 ✅

객체 모델 → 3가지 영역 → HEAD와 참조
"왜 이렇게 동작하는가?" 이해하기

2️⃣ 실습 중심

이론만 보기 ❌
직접 실습하기 ✅

테스트 레포지토리 만들기
의도적으로 충돌 만들고 해결하기
실수하고 복구하는 연습

3️⃣ 실전 시나리오

단순 예제 ❌
복잡한 실전 시나리오 ✅

18장 실전 프로젝트 도전
팀 프로젝트에 바로 적용
트러블슈팅 경험 쌓기

📖 문서 구성

🎓 Git In-Depth 학습 구조

각 문서는 "이해 → 실습 → 응용" 3단계로 구성됩니다:

STEP 1: 내부 원리 이해하기 🧠

🎯 왜 필요한가?
   실제 개발 시나리오로 시작
   "이런 상황에서 막혔던 경험 있으신가요?"

📌 Git 내부에서 일어나는 일
   .git 디렉토리 분석
   객체 모델로 이해하기
   HEAD, 참조, 포인터의 실체

STEP 2: 명령어 완전 정복 💻

🔧 기본 명령어
   git [command] --option
   각 옵션의 의미와 차이

📊 명령어 비교표
   언제 A를 쓰고 언제 B를 쓰나
   예: reset --soft vs --mixed vs --hard

⚡ 실행 결과 시각화
   명령어 실행 전/후 상태 다이어그램
   .git 디렉토리 변화 확인

STEP 3: 실전 시나리오 마스터 🔥

💼 실무 상황별 해결책
   Scenario 1: [구체적 상황]
   Problem: [문제 발생]
   Solution: [단계별 해결]
   
🚨 함정 & 실수 방지
   "이렇게 하면 안 됩니다" (❌)
   "이렇게 하세요" (✅)
   
🎯 실습 미션
   직접 해볼 수 있는 실습 과제
   테스트 레포지토리로 연습

BONUS: 빠른 참조 📌

📋 Cheat Sheet
   자주 쓰는 명령어 모음
   
🔗 관련 문서 링크
   이전/다음 학습 추천
   
💡 추가 팁
   생산성을 높이는 Alias
   유용한 Config 설정

📚 문서 난이도 체계

난이도 대상 특징
입문자 Git 처음 배우는 분 / 기본 개념
⭐⭐ 중급자 팀 프로젝트 경험 / 충돌 해결 경험
⭐⭐⭐ 고급자 복잡한 시나리오 / 내부 구조 이해 필요

학습 팁:

  • 입문자는 ⭐ 문서부터 순서대로
  • 특정 문제 해결이 목적이면 해당 난이도로 직행
  • 고급 문서는 기초 문서 이해 후 도전

🎯 효과적인 학습 방법

1️⃣ 원리 우선 (Principle First)

명령어 암기 ❌
내부 동작 이해 ✅

"git reset --hard는 어떻게 동작하는가?"
→ HEAD 이동 + Staging Area 초기화 + Working Directory 초기화
→ .git/refs/heads/[branch] 파일 수정
→ 객체는 삭제 안 됨 (reflog로 복구 가능)

2️⃣ 실습 중심 (Hands-on Practice)

독서만 ❌
직접 실습 ✅

1. 테스트 레포지토리 생성
2. 의도적으로 문제 상황 만들기
3. 명령어로 해결하며 학습
4. .git 디렉토리 직접 열어보기

3️⃣ 시각화 (Visualization)

텍스트만 ❌
그림으로 이해 ✅

git log --graph --oneline --all
각 커밋의 부모 관계 시각화
브랜치 포인터 위치 확인

4️⃣ 실수와 복구 (Fail & Recover)

실수 두려워하기 ❌
실수하고 복구 연습 ✅

일부러 잘못된 명령 실행
→ reflog로 복구
→ 왜 복구되는지 이해
→ 실전에서 자신감

💡 이 레포의 차별점

✨ 다른 Git 가이드와의 차이

일반 Git 가이드 🚀 Git In-Depth
명령어 나열 ✅ 내부 원리 이해
기본 예제 ✅ 복잡한 실전 시나리오
단순 설명 ✅ 트러블슈팅 가이드
개인 학습 ✅ 팀 워크플로우 전략
초급 중심 ✅ 초급~고급 전체

🎯 이 레포로 할 수 있는 것

  • 복잡한 Merge 충돌 자신있게 해결
  • Rebase 실수 완벽 복구
  • Git 내부 구조 완벽 이해
  • 팀 워크플로우 설계와 적용
  • 대규모 프로젝트 Git 전략 수립
  • 트러블슈팅 능력 향상

🤝 기여하기

더 좋은 예제나 설명이 있다면 언제든 환영합니다!

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/AmazingTopic)
  3. Commit your changes (git commit -m 'Add amazing topic')
  4. Push to the branch (git push origin feature/AmazingTopic)
  5. Open a Pull Request

🙏 Reference


⭐️ 도움이 되셨다면 Star를 눌러주세요!


"단순 명령어 암기를 넘어, Git의 내부 동작 원리부터 복잡한 실전 시나리오까지"

About

단순 명령어 암기를 넘어, Git의 내부 동작 원리부터 복잡한 실전 시나리오까지

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published