이번 포스트에서는 Git의 핵심 개념과 실무에서 자주 사용되는 명령어를 소개한다.
Git의 기본 구조, 주요 명령어, 그리고 브랜치 관리 방법에 대해 자세히 알아보려 한다.
1. Git의 기본 구조
Git
git-scm.com
Git은 파일의 변경 사항을 시간에 따라 추적한다. Git의 기본 구조는 다음과 같다.
- 작업 디렉토리 (Working Directory): 실제 파일들이 존재하는 곳
- 스테이징 영역 (Staging Area): 커밋할 변경사항들을 준비하는 중간 영역
- Git 저장소 (Repository): 모든 버전과 변경 이력이 저장되는 곳
2. 주요 Git 명령어
2-1. 저장소 생성 및 복제
- git init: 새로운 Git 저장소 초기화
- git clone [`url`]: 원격 저장소 복제
2-2. 변경사항 관리
- git add [`파일명`]: 변경사항을 스테이징 영역에 추가
- git commit -m "[`커밋 메시지`]": 변경사항 커밋
- git status: 현재 저장소 상태 확인
- git diff: 작업 디렉토리와 스테이징 영역의 차이 확인
2-3. 이력 조회
- git log: 커밋 히스토리 조회
* 옵션: git log --oneline (간단한 로그 보기), git log --graph (그래프로 보기) - git show [`커밋 해시`]: 특정 커밋의 상세 정보 확인
2-4. 원격 저장소 관리
- git remote add [`이름`] [`url`]: 원격 저장소 추가
- git pull: 원격 저장소의 변경사항을 로컬로 가져오기
- git push [`원격 이름`] [`브랜치 이름`]: 로컬 변경사항을 원격 저장소로 보내기
2-5. 브랜치 기본 명령어
- git branch: 브랜치 목록 조회
- git branch [`브랜치명`]: 새 브랜치 생성
- git checkout [`브랜치명`]: 다른 브랜치로 전환
* Git 2.23 버전부터는 git switch [`브랜치명`]도 사용 가능 - git merge [`브랜치명`]: 현재 브랜치에 다른 브랜치 병합
- git branch -d [`브랜치명`]: 브랜치 삭제
3. 브랜치 관리 모델
Git을 효과적으로 사용하기 위해서는 체계적인 브랜치 관리가 중요하다.
프로젝트에서 자주 사용되는 브랜치 관리 구조는 다음과 같다.
- 메인 브랜치 (main/master)
- 목적: 안정적인 프로덕션 코드 관리
- 특징: 항상 배포 가능한 상태를 유지
- 개발 브랜치 (develop)
- 목적: 다음 릴리스를 위한 개발 코드 통합
- 특징: 새로운 기능들이 해당 브랜치에 병합됨
- 기능 브랜치 (feature)
- 목적: 새로운 기능 개발
- 명명 규칙: `feature/기능이름`
- 특징: develop 브랜치에서 분기하여 작업 후 다시 병합
- 릴리스 브랜치 (release)
- 목적: 릴리스 준비 및 최종 버그 수정
- 명명 규칙: `release-v1.0`
- 특징: develop에서 분기하여 준비 후 main과 develop에 병합
- 핫픽스 브랜치 (hotfix)
- 목적: 프로덕션 환경의 긴급 버그 수정
- 명명 규칙: `hotfix-v1.0.1`
- 특징: main에서 분기하여 수정 후 main과 develop에 병합
4. Git 작업 흐름
- 새로운 기능 개발 시작
git checkout main
git pull origin main
git checkout -b feature/new-feature
- 변경사항 커밋
git add .
git commit -m "Add new feature"
- 메인 브랜치에 병합
git checkout main
git merge feature/new-feature
git push origin main
- 기능 브랜치 삭제
git branch -d feature/new-feature
5. 유용한 Git 기능
5-1. Stashing
작업 중인 변경사항을 임시로 저장하고 나중에 다시 적용할 수 있다.
- git stash: 현재 변경사항 임시 저장
- git stash pop: 가장 최근의 stash를 적용하고 스택에서 제거
5-2. Git 되돌리기
- git reset --hard [`커밋 해시`]: 특정 커밋으로 되돌리기 (*주의: 이후의 커밋 삭제)
- git revert [`커밋 해시`]: 특정 커밋을 취소하는 새로운 커밋 생성
6. Git 사용 시 주의사항
- 명확하고 일관된 커밋 메시지 작성
- 목적: 프로젝트 히스토리의 명확성과 가독성 향상
- 실천 방안:- 첫 줄에 변경 사항을 간결하게 요약 (50자 이내)
- 필요시 빈 줄 후 상세 설명 추가 (각 줄 72자 이내)
- 작은 단위로 세분화하여 자주 커밋하기
- 목적: 변경 사항 추적 용이성 및 문제 해결의 효율성 증대
- 실천 방안:
- 논리적으로 분리 가능한 각 변경사항마다 커밋
- 단일 커밋이 다수의 문제를 해결하지 않도록 주의
- 공개 브랜치 히스토리 유지하기
- 목적: 협업의 안정성과 일관성 유지
- 실천 방안:- `git push --force` 사용 자제
- 이미 푸시된 커밋 수정 시, 새로운 커밋으로 변경사항 추가
- .gitignore 파일 활용하기
- 목적: 저장소의 청결성 유지 및 불필요한 파일 관리 방지
- 실천 방안:
- 프로젝트 루트에 .gitignore 파일 생성
- 무시할 파일 패턴 추가 (ex: *.log, node_modules/, .DS_Store)
* gitignore.io에서 프로젝트별 템플릿 생성 가능
- 충돌 해결 신중하게 하기
- 목적: 부적절한 충돌 해결로 인한 코드 손실 또는 버그 발생 가능성 최소화
- 실천 방안:
- 충돌이 발생한 파일을 주의 깊게 검토
- 필요시 관련 개발자들과 상의하여 최선의 해결책 도출
- 충돌 해결 후 반드시 테스트 실행
* 복잡한 충돌의 경우 git mergetool 사용 고려
'Git' 카테고리의 다른 글
[Git] MacOS 환경에서 GitHub 기술 블로그 만들기: 로컬 환경에 저장소 클론 (0) | 2024.08.12 |
---|---|
[Git] MacOS 환경에서 GitHub 기술 블로그 만들기: GitHub 저장소 생성 (2) | 2024.08.04 |