본문 바로가기

Git

[Git] Git 실무 가이드: 핵심 개념과 주요 명령어

이번 포스트에서는 Git의 핵심 개념과 실무에서 자주 사용되는 명령어를 소개한다.

Git의 기본 구조, 주요 명령어, 그리고 브랜치 관리 방법에 대해 자세히 알아보려 한다.

 

1. Git의 기본 구조

https://git-scm.com

 

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 사용 시 주의사항

  1. 명확하고 일관된 커밋 메시지 작성
    - 목적: 프로젝트 히스토리의 명확성과 가독성 향상
    - 실천 방안:
    • 첫 줄에 변경 사항을 간결하게 요약 (50자 이내)
    • 필요시 빈 줄 후 상세 설명 추가 (각 줄 72자 이내)
  2. 작은 단위로 세분화하여 자주 커밋하기
    - 목적: 변경 사항 추적 용이성 및 문제 해결의 효율성 증대
    - 실천 방안:
    • 논리적으로 분리 가능한 각 변경사항마다 커밋
    • 단일 커밋이 다수의 문제를 해결하지 않도록 주의
  3. 공개 브랜치 히스토리 유지하기
    - 목적: 협업의 안정성과 일관성 유지
    - 실천 방안:
    • `git push --force` 사용 자제
    • 이미 푸시된 커밋 수정 시, 새로운 커밋으로 변경사항 추가
  4. .gitignore 파일 활용하기
    - 목적: 저장소의 청결성 유지 및 불필요한 파일 관리 방지
    - 실천 방안:
    • 프로젝트 루트에 .gitignore 파일 생성
    • 무시할 파일 패턴 추가 (ex: *.log, node_modules/, .DS_Store)
      gitignore.io에서 프로젝트별 템플릿 생성 가능
  5. 충돌 해결 신중하게 하기
    - 목적: 부적절한 충돌 해결로 인한 코드 손실 또는 버그 발생 가능성 최소화
    - 실천 방안:
    • 충돌이 발생한 파일을 주의 깊게 검토
    • 필요시 관련 개발자들과 상의하여 최선의 해결책 도출
    • 충돌 해결 후 반드시 테스트 실행
      * 복잡한 충돌의 경우 git mergetool 사용 고려