Git은 2005년 리눅스 창시자 Linus Torvalds가 개발한 분산 버전 관리 시스템(DVCS) 이다. 소스코드의 변경 이력을 추적하고, 여러 개발자가 동시에 협업할 수 있게 한다. GitHub, GitLab, Bitbucket 등의 플랫폼과 결합해 현대 소프트웨어 개발의 표준이 됐다.
Git의 세 가지 영역
Working Directory Staging Area Repository (.git)
(작업 공간) (스테이징) (저장소)
│ │ │
│── git add ───────>│ │
│ │── git commit ─>│
│<────────────────────── git checkout ─│
기본 명령어
bash
# 초기화 & 설정
git init # 새 저장소 초기화
git clone https://github.com/... # 원격 저장소 복제
git config --global user.name "Alice"
git config --global user.email "alice@example.com"
# 변경사항 관리
git status # 현재 상태 확인
git add file.txt # 파일 스테이징
git add . # 모든 변경사항 스테이징
git commit -m "메시지" # 커밋
git log --oneline # 커밋 이력 확인
# 원격 저장소
git remote add origin https://github.com/user/repo.git
git push origin main # 원격에 푸시
git pull origin main # 원격에서 가져오기
git fetch origin # 원격 정보만 가져오기
브랜치 (Branch)
main: A ─── B ─── C ─────────── G
\ /
feature: D ─── E ─── F ──
(병렬 개발) (merge)
bash
git branch feature/login # 브랜치 생성
git checkout feature/login # 브랜치 전환
git checkout -b feature/login # 생성 + 전환
git merge feature/login # 브랜치 병합 (main에서)
git rebase main # 베이스 재설정
git branch -d feature/login # 브랜치 삭제
병합 충돌 (Merge Conflict)
<<<<<<< HEAD (현재 브랜치)
console.log("Hello, Alice!");
=======
console.log("Hello, Bob!");
>>>>>>> feature/greeting (병합하려는 브랜치)
→ 수동으로 충돌 해결 후 git add + git commit
Git 워크플로우
GitHub Flow (단순)
main ─── feature 브랜치 ─── PR ─── 코드 리뷰 ─── merge
main (배포) ← release ← develop ← feature
↑
hotfix
자주 쓰는 고급 명령어
bash
# 커밋 되돌리기
git revert HEAD # 이전 커밋을 취소하는 새 커밋 생성
git reset --soft HEAD~1 # 커밋만 취소, 스테이징은 유지
git reset --hard HEAD~1 # 커밋 + 변경사항 모두 취소
# 임시 저장
git stash # 현재 작업 임시 저장
git stash pop # 임시 저장 복원
# 특정 커밋만 가져오기
git cherry-pick abc123
# 변경 이력 보기
git diff HEAD~1 HEAD # 최근 두 커밋 비교
git blame file.txt # 줄별 작성자 확인
SHA-1과 Git
Git의 모든 객체(커밋, 트리, 블롭)는 SHA-256(구버전은 SHA-1)으로 해시화된다.
커밋 해시: 44a3bf1e7d2c9a8f... (40자리 16진수)
→ 커밋 내용, 시각, 부모 해시를 SHA로 해싱한 결과
→ 내용이 1비트라도 바뀌면 해시 완전히 변경 (불변성 보장)
관련 개념
- •SHA-256 — Git 객체 해싱 알고리즘
- •머클 트리 — Git의 트리 구조가 유사한 개념
- •P2P — 분산 버전 관리의 탈중앙 철학
참고문헌
- •Chacon, S. & Straub, B. Pro Git (무료 온라인 제공)
- •Git 공식 문서: git-scm.com