Git: 코드의 시간 기계
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- 초보자~경험자 개발자: Java, Python 프로젝트 관리 및 협업에 유용
- 난이도: 중간 (기초부터 고급 명령어까지 포함)
핵심 요약
- Git은 분산 버전 관리 시스템으로, 코드 변경 사항을 스냅샷(커밋)으로 기록하여 역추적, 분기, 병합 가능
- 핵심 개념: Repository (프로젝트와 역사), Commit (변경 스냅샷), Branch (병렬 작업), Merge (히스토리 통합), Remote (GitHub 등 공유 저장소)
- 실무 활용: 커밋, 브랜치, 병합, 리베이스, 스테이시, 체리피크 등으로 협업 효율성 극대화 및 오류 복구 가능
섹션별 세부 요약
1. Git 소개 및 핵심 개념
- Git은 시간 기계로, 커밋을 체크포인트로 사용하여 코드 역사 추적 가능
- 안전성: 실수 복구, 협업: 팀 동시 작업, 추적성: 변경 내역 기록, 유연성: 다양한 워크플로우 지원
- 예시: Aisha의 팀은 Git 도입 후 버그 수정 손실 80% 감소 및 앱 출시 시기 준수
2. Git 기본 워크플로우
- Initialize:
git init
으로 저장소 생성 - Stage:
git add
로 변경사항 선택 - Commit:
git commit
으로 역사 기록 - Branch:
git branch
로 병렬 작업 생성 - Merge:
git merge
으로 변경 통합 - Push/Pull:
git push
,git pull
로 원격 저장소 동기화
3. 실습 예제 (Java 프로젝트)
- Step 1: Git 설치 및 버전 확인 (
git --version
) - Step 2:
Payment.java
생성 후git init
으로 저장소 초기화 - Step 3:
git add
,git commit
으로 첫 커밋 - Step 4: GitHub에 원격 저장소 연결 (
git remote add origin
) - Step 5:
git push
로 코드 공유 및 협업
4. 고급 명령어 및 해결책
- Rebase:
git rebase main
으로 브랜치 커밋 이동 (병합 커밋 회피) - Stash:
git stash
로 임시 저장 및git stash pop
으로 복원 (워크스페이스 정리) - Cherry-pick:
git cherry-pick
로 특정 커밋 적용 (핫픽스 시 유용) - 위험 대응:
- 충돌: 수동 해결 후 git commit
- 역사 덮어쓰기: git push --force-with-lease
사용
- 대규모 파일: Git LFS 활용
5. Git vs SVN/ Mercurial 비교
| 항목 | Git | SVN | Mercurial |
|--------------|-------------------------|------------------------|-----------------------|
| 유형 | 분산 VCS | 중앙 집중형 VCS | 분산 VCS |
| 속도 | 빠름 (로컬 연산) | 느림 (서버 의존) | 빠름 (Git 유사) |
| 브랜칭 | 가볍고 유연 | 무거움, 복잡 | 가볍고 Git보다 간단 |
| 사용 사례| 현대 소프트웨어, 오픈소스 | 유산 기업 시스템 | 소규모 프로젝트 |
6. FAQ 및 결론
- Q1: 혼자 작업할 때 Git 필요? A: 예, 실수 복구 및 변경 추적 가능
- Q2: GitHub과 Git 차이? A: Git은 도구, GitHub은 호스팅 플랫폼
- Q3: 커밋 취소 방법? A:
git revert
또는git reset
결론
- Git을 사용하면 협업 효율성 극대화 및 코드 안전성 확보 가능
- 핵심 팁:
git rebase
,git stash
,git cherry-pick
으로 고급 제어, 대규모 파일은 Git LFS 사용 - 결론: Git은 현대 개발에서 필수적인 코드 역사 관리 도구로, 모든 프로젝트에서 활용 권장