Git 공통 규칙 정리

다람·2025년 8월 19일
0

git

목록 보기
1/1
post-thumbnail

팀프로젝트를 진행하기 앞서 git 브랜치 전략을 정하고 문서화하는 과정입니다.
오류가 있는 부분은 댓글로 알려주시면 감사하겠습니다.
프로젝트를 진행하면서 스스로 발견하는 오류사항은 수정하면서 작업하려고 하고 있습니다.
명령어를 직접 작성하면서 익숙해지는 것을 목표로 하고있었기 때문에 git-bash에서 직접 명령어를 작성하도록 안내하였습니다.

1. 협업 기본 흐름 및 브랜치 전략

git-flow 브랜치 전략을 사용한다.

기본 흐름

  1. Organization(조직)의 Repository를 Fork한다.
  2. 각자 로컬에 clone을 수행한 후 develop 브랜치로 이동한다.
  3. 이슈를 생성한다.
  4. develop 브랜치에서 새로운 기능 개발 브랜치를 생성한다.
    • feature/{issue-number}-{feature-name}
  5. 작업 완료 후 add → commit → push 한다.(본인 원격 저장소에)
  6. Organization 저장소의 develop 브랜치에 PR(Pull Request)을 요청(생성)한다.
  7. 팀장의 리뷰가 승인 후 merge를 진행한다.
  8. merge가 완료되면 브랜치를 삭제한다.(원격/로컬 모두)

브랜치 종류

  • master: 배포 가능한 브랜치
  • develop: 개발한 기능이 모여있는 브랜치
  • feature: 기능을 개발하는 브랜치
    • develop 에서 분기해서 작성
    • master에서 분기 금지
  • release: 품질검사(QA)를 하기위한 브랜치 (출시 준비용)
  • hotfix: master 브랜치에 발생한 버그를 긴급 수정하는 브랜치

2. 브랜치 사용 규칙

  • master: 배포용 (PR 금지, 팀장만 관리)
  • develop: 공용 개발 브랜치
  • feature/{issue-number}-{feature-name}: 기능 개발용(develop에서 분기)
    • 이슈 추적을 사용하기 위해서 위와 같은 방식을 사용한다.
    • 예시: feature/2-userinfo-api
  • hotfix/{issue-number}: 운영 중 버그 수정(master에서 분기)

3. 깃 커밋 메시지 작성 규칙

작성 규칙

탬플릿

type: 제목(50자 이내, 명령문, 끝에 마침표 X) 

본문 (무엇과 왜를 설명, 72자 단위 줄바꿈 실시)

closed #이슈번호

예시

feat: Add login API

사용자 로그인 API 추가.
비밀번호 암호화 적용.

closed #2

커밋 유형(type)

타입 이름내용
feat새로운 기능에 대한 커밋
fix버그 수정에 대한 커밋
build빌드 관련 파일 수정 / 모듈 설치 또는 삭제에 대한 커밋
chore그 외 자잘한 수정에 대한 커밋
cici 관련 설정 수정에 대한 커밋
docs문서 수정에 대한 커밋
style코드 스타일 혹은 포맷 등에 관한 커밋
refactor코드 리팩토링에 대한 커밋
test테스트 코드 수정에 대한 커밋
perf성능 개선에 대한 커밋

커밋 규칙

  1. 제목과 본문 등 사이는 빈 행으로 구분한다.
  2. 제목은 50글자 이내로 제한한다.
  3. 제목 첫 글자는 대문자로 작성한다.
  4. type은 소문자로 작성한다.
  5. 제목 끝에 마침표를 넣지 않는다.
  6. 제목은 명령문으로 사용하며 과거형을 사용하지 않는다.
  7. 본문에서 각 행은 72글자 내로 제한한다.
  8. 어떻게를 설명하지 않고 무엇, 왜를 설명한다.

커밋과 함께 이슈를 닫을 수 있는 키워드

  • close
  • closes
  • closed
  • fix
  • fixes
  • fixed
  • resolve
  • resolves
  • resolved

4. 알아야하는 Git 명령어

일련의 단계들을 이해하기 위해서

꼭 작업 흐름 단계별로 명령어와 함께 아래의 예시를 봐야됨.

1. 프로젝트 초기 세팅

# 자신의 계정으로 Fork 후 clone
# (브랜치 상관없음 — 클론한 직후)
git clone https://github.com/{내계정}/{레포지토리}.git
cd {레포지토리}

# (브랜치 상관없음)
# 원본(팀 Organization) 저장소를 upstream으로 추가
git remote add upstream https://github.com/{Organization}/{레포지토리}.git
  1. .gitignore 설정
  2. application.propterties 설정
  3. application-*.properties 설정
# develop 브랜치로 전환
git checkout develop

git pull upstream develop
  • upstream 설정 이유
    • 팀장이 develop 브랜치를 업데이트하게되면, 본인 origin은 자동으로 갱신되지 않기 때문에
      upstream을 설정해줘야 쉽게 최신 코드를 받아올 수 있음
    • sync fork와 동일한 작업이지만 터미널에서 해결하는 방법으로 변경하였음

여기서부터 계속 반복

2. 기능 개발 시작(feature 브랜치)

# 최신 develop 가져오기(작업 시작 전 필수임!)
git fetch upstream                # upstream(Organization)의 최신 내용 가져오기
git checkout develop              # develop 브랜치로 이동
git pull upstream develop         # 최신 내용으로 갱신

# 기능 브랜치 생성(develop에서 분기)
git checkout -b feature/2-userinfo-api # 브랜치명 예시로 작성한 것
  • 주의
    • feature 브랜치는 꼭 develop에서만 분기할 것.
    • 브랜치명은 feature/{issue-number}-{feature-name} 형태로 사용할 것

3. 작업 후 커밋 & 푸시

# (현재 브랜치: feature/2-userinfo-api)
git status              # 변경 내용 확인
git add .               # 변경 파일 모두 추가(선택적으로도 가능)
git commit              # 규칙 준수

----------------------------------------
feat: Add login API

사용자 로그인 API 추가.
비밀번호 암호화 적용.

closed #2
----------------------------------------

# 본인 fork(origin)의 브랜치로 푸시
git push origin feature/2-userinfo-api

4. PR 생성

  • Github에서 수행
    • PR 대상: 내 저장소 → Organization 저장소의 develop 브랜치
    • PR 내용
      ### PR 타입(하나 이상의 PR 타입을 작성해주세요)
      - 기능 추가
      - 기능 삭제
      - 버그 수정
      - 의존성, 환경 변수, 빌드 관련 코드 업데이트
      
      ### 반영 브랜치
      ex) feat/9-userLogin-api -> develop
      
      ### 반영 사항
      ex) 로그인 시, 구글 소셜 로그인 기능을 추가했습니다.
      
      ### 적용 화면(선택사항)
      
      closed #이슈번호
  • 팀장 리뷰 후 merge 진행
  • 원격 브랜치 삭제

5. Merge 완료 후 로컬 브랜치 정리

  • 브랜치 이동과 삭제는 명령어 사용하지말고 UI에서 제공하는 메뉴를 이용해서 할 것

    git fetch upstream
    
    # develop 브랜치로 전환(git checkout develop)
    
    git pull upstream develop         # 최신 develop 동기화
    
    # 브랜치 삭제 (로컬 & 원격)
    # (develop 상태에서, 병합 완료된 feature 브랜치 삭제)
    git branch -d feature/3-login-api
    git push origin --delete feature/3-login-api
    
    # 최신 develop으로 동기화
    git fetch upstream
    git checkout develop
    git pull upstream develop
  • 메뉴 이용해야되는 이유

    window에서 인텔리제이에서 파일을 열고 있기 때문에 삭제하지 못하도록 lock을 걸고있기 때문에 당황할 수 있음(본인이 그랬음...)
    인텔리자체 기능을 이용하는게 편함

1. 브랜치 이동

2. 원격 변경사항 확인 및 최신 브랜치 동기화

    git fetch upstream
    
    git pull upstream develop         # 최신 develop 동기화

3. 브랜치 삭제

profile
개발하는 다람쥐

0개의 댓글