분산형 버전 관리 시스템 Git의 기초와 활용
Git은 코드 변경 이력을 추적하고 팀원 간 협업을 효율적으로 지원하는 분산형 버전 관리 도구입니다. 로컬 머신에서도 완전한 저장소를 유지하며, 네트워크 없이도 커밋, 브랜치 생성, 병합 등의 작업이 가능합니다.
작업 영역과 파일 상태
Git은 작업 과정에서 세 가지 주요 영역으로 나뉩니다:
| 영역 | 목적 | 대응 상태 |
|---|---|---|
| 작업 디렉터리(Working Directory) | 현재 수정 중인 파일 보관 | modified |
| 스테이징 영역(Staging Area) | 커밋 대기 중인 변경 사항 저장 | staged |
| 로컬 저장소(Local Repository) | 완료된 커밋 기록 보관 | committed |
기본 로컬 작업
저장소 초기화
git init: 현재 폴더를 Git 저장소로 변환git init project-name: 지정된 이름의 새 저장소 생성git init --bare shared-repo.git: 공유 목적의 베어 저장소 생성 (작업 디렉터리 없음)
변경 사항 추가 및 커밋
git add filename: 특정 파일을 스테이징 영역에 등록git add .: 모든 변경 사항을 스테이징git commit -m "설명 메시지": 스테이징된 내용을 커밋git commit --amend: 직전 커밋에 새로운 변경을 통합하거나 메시지를 수정
상태 확인
git status: 현재 작업 디렉터리와 스테이징 상태 조회git log --oneline: 최근부터 순차적인 커밋 기록 요약 출력git reflog: 로컬에서 수행한 모든 동작 기록 확인 (삭제된 커밋 복구에 유용)
버전 되돌리기 전략
리셋 모드 비교
git reset 명령은 다음 세 가지 옵션으로 동작 방식이 달라집니다:
# 혼합 리셋 (기본값): 스테이징과 저장소는 이전 상태로, 작업 디렉터리는 유지
git reset --mixed HEAD~2
# 소프트 리셋: 저장소만 이전 상태로, 작업 및 스테이징 내용 유지
git reset --soft HEAD~1
# 하드 리셋: 모든 변경 사항 삭제 후 지정 커밋 상태로 강제 복귀
git reset --hard HEAD~3
안전한 취소: 리버트
git revert <commit-hash>는 특정 커밋의 변경을 반전시키는 새로운 커밋을 생성합니다. 과거 기록을 수정하지 않으면서도 효과적으로 문제를 해결할 수 있어 협업 환경에서 권장됩니다.
브랜치 운영 전략
브랜치 조작 명령
git branch feature/login: 새 브랜치 생성git checkout -b hotfix/critical: 브랜치 생성과 동시에 전환git switch main: 다른 브랜치로 전환 (Git 2.23+)git merge feature/ui: 기능 브랜치를 현재 브랜치에 병합
병합 방식
패스트 포워드 병합: 기준 브랜치에 추가 커밋이 없을 때, 단순히 포인터를 이동시켜 직선적인 이력 유지
비-패스트 포워드 병합: git merge --no-ff 사용 시 항상 병합 커밋 생성. 브랜치의 존재 흔적을 명확히 남김
고급 기능 활용
체리 픽
특정 커밋만을 선택적으로 다른 브랜치에 적용할 수 있습니다:
git cherry-pick abc123def # 단일 커밋 복제
git cherry-pick abc123 def456 # 다수 커밋 연속 적용
인터랙티브 리베이스
과거 커밋 기록을 재구성하는 강력한 도구입니다:
git rebase -i HEAD~4
- reword: 커밋 메시지 수정
- squash/fixup: 여러 커밋 병합 (메시지 유지/삭제 여부 차이)
- drop: 불필요한 커밋 제거
- edit: 커밋 후 수정 삽입
원격 저장소 연동
초기 설정
git remote add origin https://github.com/user/repo.git
git push -u origin main
데이터 동기화
git fetch origin: 원격 정보만 가져오고 로컬에 저장 (자동 병합 없음)git pull origin main: fetch + merge 한 번에 실행git push origin main: 로컬 커밋을 원격 저장소에 전송
브랜치 매핑 규칙
# 원격 브랜치 기반으로 로컬 브랜치 생성
git fetch origin dev:local-dev
# 원격 브랜치 삭제
git push origin --delete stale-branch
# 태그 전송
git push origin v1.0.0
파일 속성 설정
.gitattributes 파일을 통해 특정 형식의 파일을 어떻게 처리할지 정의할 수 있습니다.
이진 파일 처리 예시
예: Word 문서를 사람이 읽을 수 있는 형태로 비교
# .gitattributes
*.docx diff=pandoc
# .git/config
[diff "pandoc"]
textconv = pandoc --to=markdown
학습 자원 추천
Learn Git Branching는 시각화된 트리 구조를 통해 브랜치, 병합, 리베이스 등의 개념을 게임처럼 익힐 수 있는 인터랙티브 학습 플랫폼입니다. 모든 동작이 실시간으로 시각화되어 직관적인 이해가 가능합니다.