Git 완벽 가이드: 버전 관리 시스템 마스터하기

들어가며

Git은 현대 소프트웨어 개발에서 필수적인 버전 관리 시스템입니다. 코드의 변경 이력을 추적하고, 팀원들과 효율적으로 협업할 수 있게 해줍니다. 이 글에서는 Git의 기초부터 실무 활용까지 상세히 다루겠습니다.

Git 워크플로우
그림 1: Git의 기본 워크플로우

Git 기본 개념

Git이란?

Git은 분산 버전 관리 시스템(DVCS)입니다. 주요 특징은 다음과 같습니다:

  • 분산 구조: 모든 개발자가 전체 저장소 복사본을 가짐
  • 빠른 속도: 대부분의 작업이 로컬에서 수행됨
  • 브랜칭: 효율적인 브랜치 생성 및 병합
  • 무결성: SHA-1 해시로 데이터 무결성 보장

세 가지 상태

Git에서 파일은 세 가지 상태를 가집니다:

상태설명
Modified파일이 수정되었지만 아직 스테이징되지 않음
Staged수정된 파일이 다음 커밋에 포함될 예정
Committed데이터가 로컬 저장소에 안전하게 저장됨

필수 Git 명령어

저장소 생성

git init

git clone https://github.com/user/repo.git

변경 사항 확인

git status

git diff

git log --oneline
Git 커밋 히스토리
그림 2: Git 커밋 히스토리 시각화

변경 사항 저장

git add .

git add filename.js

git commit -m "feat: add login feature"

원격 저장소 작업

git remote add origin https://github.com/user/repo.git

git push origin main

git pull origin main

git fetch origin
git pullgit fetch + git merge와 같습니다. 충돌 가능성이 있다면 fetch 후 수동으로 병합하는 것이 안전합니다.

브랜치 관리

브랜치 기본

git branch

git branch feature-login

git checkout feature-login

git checkout -b feature-login
Git 브랜칭 모델
그림 3: Git Flow 브랜칭 전략

브랜치 병합

git checkout main

git merge feature-login

git branch -d feature-login

병합 충돌 해결

충돌이 발생하면 다음과 같이 표시됩니다:

<<<<<<< HEAD
현재 브랜치의 내용
=======
병합하려는 브랜치의 내용
>>>>>>> feature-login

충돌 해결 후:

git add .
git commit -m "resolve merge conflict"

Git Flow 전략

Git Flow는 체계적인 브랜치 관리 전략입니다.

브랜치 종류

브랜치용도
main프로덕션 코드
develop개발 통합 브랜치
feature/*새 기능 개발
release/*릴리스 준비
hotfix/*긴급 버그 수정

워크플로우

  1. develop에서 feature 브랜치 생성
  2. 기능 개발 완료 후 develop에 병합
  3. 릴리스 준비 시 release 브랜치 생성
  4. 테스트 완료 후 maindevelop에 병합
  5. 긴급 수정은 hotfix 브랜치 사용

커밋 메시지 규칙

Conventional Commits

<type>(<scope>): <description>

[optional body]

[optional footer]

타입 종류

타입설명
feat새로운 기능
fix버그 수정
docs문서 변경
style코드 포맷팅
refactor리팩토링
test테스트 추가
chore빌드, 도구 설정

좋은 커밋 메시지 예시

git commit -m "feat(auth): add JWT token validation"

git commit -m "fix(api): resolve null pointer exception in user service"

git commit -m "docs: update README with installation guide"

고급 기능

Rebase

git checkout feature
git rebase main

Cherry-pick

git cherry-pick abc123

Stash

git stash

git stash list

git stash pop

git stash apply stash@{0}

Reset과 Revert

git reset --soft HEAD~1

git reset --hard HEAD~1

git revert abc123
git reset --hard는 변경 사항을 영구적으로 삭제합니다. 신중하게 사용하세요.

협업 워크플로우

Pull Request 프로세스

  1. 원본 저장소 Fork
  2. 로컬에 Clone
  3. Feature 브랜치 생성
  4. 변경 사항 커밋
  5. Fork한 저장소에 Push
  6. Pull Request 생성
  7. 코드 리뷰 및 수정
  8. 병합 승인

코드 리뷰 팁

  • 작은 단위로 PR 생성
  • 명확한 설명 작성
  • 관련 이슈 연결
  • 스크린샷이나 GIF 첨부

유용한 Git 설정

글로벌 설정

git config --global user.name "Your Name"
git config --global user.email "your@email.com"

git config --global init.defaultBranch main

git config --global core.editor "code --wait"

Git Alias

git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.lg "log --oneline --graph --all"

마치며

Git은 강력한 도구이지만 올바르게 사용하려면 연습이 필요합니다. 기본 명령어부터 시작하여 점차 고급 기능을 익혀나가세요. 체계적인 브랜치 전략과 명확한 커밋 메시지는 팀 협업에서 매우 중요합니다.

참고 자료