들어가며
Git은 현대 소프트웨어 개발에서 필수적인 버전 관리 시스템입니다. 코드의 변경 이력을 추적하고, 팀원들과 효율적으로 협업할 수 있게 해줍니다. 이 글에서는 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 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 pull은 git fetch + git merge와 같습니다. 충돌 가능성이 있다면 fetch 후 수동으로 병합하는 것이 안전합니다.브랜치 관리
브랜치 기본
git branch
git branch feature-login
git checkout feature-login
git checkout -b feature-login
브랜치 병합
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/* | 긴급 버그 수정 |
워크플로우
develop에서feature브랜치 생성- 기능 개발 완료 후
develop에 병합 - 릴리스 준비 시
release브랜치 생성 - 테스트 완료 후
main과develop에 병합 - 긴급 수정은
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"
커밋 메시지는 명확하고 구체적으로 작성해야 합니다. “fix bug"나 “update code” 같은 모호한 메시지는 피하세요.
고급 기능
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 프로세스
- 원본 저장소 Fork
- 로컬에 Clone
- Feature 브랜치 생성
- 변경 사항 커밋
- Fork한 저장소에 Push
- Pull Request 생성
- 코드 리뷰 및 수정
- 병합 승인
코드 리뷰 팁
- 작은 단위로 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은 강력한 도구이지만 올바르게 사용하려면 연습이 필요합니다. 기본 명령어부터 시작하여 점차 고급 기능을 익혀나가세요. 체계적인 브랜치 전략과 명확한 커밋 메시지는 팀 협업에서 매우 중요합니다.
참고 자료
- Git 공식 문서: https://git-scm.com/doc
- Pro Git 책: https://git-scm.com/book/ko/v2