Git Flow - 3. 사용법 요약 및 팁

3 minute read

본 포스트에서는 커맨드를 활용한 Git Flow 브랜치 전략 사용법을 다룬다. Git Flow에 대한 개념 및 단계별 자세한 사용 방법은 Git Flow - 1. 기본 개념 및 명령어Git Flow - 2. 샘플 프로젝트를 통한 사용법 예시 (How to/Tutorial) 에 정리해 작성했다.

요약

Git Flow 실행 환경 구성

  • brew install git-flow-avh
  • 작업 중 원격 저장소 있을 시
    • git clone <원격 저장소 주소>
    • git branch -t master origin/master
    • git flow init
  • 작업 중 원격 저장소 없을 시
    • git flow init
  • git hook 적용
    • git config core.hooksPath .githooks
    • cd .githookschmod +x prepare-commit-msg (실행권한 있다면 과정 필요 x)

develop, feature 브랜치를 통한 기능 개발

일반적인 기능 개발 시 develop 브랜치를 기준으로 feature 브랜치를 만들어 개발 작업 수행

  • git flow feature start PPP-1-login
  • git pull --rebase origin develop
  • git flow feature finish PPP-1-login
  • git push origin develop

release 브랜치를 활용한 배포

배포 필요 시점에 release 브랜치를 사용해 버그를 수정하고 master 반영 및 develop 재반영

  • git flow release start 0.1
  • git flow release finish 0.1
    • 태그명과 같이 태그 설명을 0.1 로 적어주며 배포 완료
  • git push origin master
  • git push origin develop
    • 브랜치와 별도로 태그에 대한 push 수행

hotfix 브랜치를 통한 긴급 수정 사항 반영

서비스 운영 시 급히 고쳐야할 장애 발생 시 hotfix 브랜치를 사용해 버그 수정 후 master 및 develop 반영

  • git flow hotfix start 0.2
  • git flow hotfix finish 0.2
    • 태그명과 같이 태그 설명을 0.2 로 적어주며 배포 완료
  • git push origin master
  • git push origin develop
  • git push --tags
    • 브랜치와 별도로 태그에 대한 push 수행

커밋 메세지 작성 방법

커밋 메세지는 [이슈번호] 타입: 커밋 설명 의 형태로 작성

  • feature 브랜치 작업 시에는 git hook 을 통해 자동으로 이슈 번호를 부여할 수 있으나 release, hotfix 작업 시에는 수기로 타이핑 필요
    • feature 브랜치 작업: git commit -m ‘타입: 커밋 설명'
    • feature 외 브랜치 작업: git commit -m ‘[이슈번호] 타입: 커밋 설명'
  • 타입 종류: Feat, Fix, Hotfix, Refactor, Docs, Style, Test, Chore

기타 git 관리 방법

  • 개발 작업 중 주기적으로 원격 저장소의 develop 브랜치의 내용을 rebase pull 로 반영
    • feature 브랜치 작업 중 git pull --rebase origin develop 을 통해 주기적으로 다른 사람 작업 내용 반영
    • feature 브랜치 finish 전에도 한 번 체크
  • squash 를 통해 불필요하게 분리된 커밋을 하나로 합침
    • 이슈 하나는 하나의 커밋으로 관리하는 것이 좋음
    • git rebase -i <commit 시점>
    • 합치고 싶은 커밋 이전의 커밋들을 pick → squash 로 변경
    • 커밋 메세지를 원하는 형태로 변경
  • 코드 리뷰가 필요한 사항에 대해서는 원격 저장소로 올리고 Pull Request 를 생성해 리뷰어와 함께 검토
    • git flow feature publish PPP-1-login
    • Pull Request 제목에 지라나 github에 [이슈번호] 를 포함해 표시되기 원하는 제목 작성
      • 커밋이 여러개라면 공통으로 이해될만한 제목 작성
    • Merge pull request를 통해 merge

Tips

  • git flow feature start PPP-4-login, git flow release start 0.1, git flow hotfix start 0.2 같은 커맨드는 다른 브랜치에 있어도 분기되어야 되는 브랜치인 develop과 master에서 각각 수행됨
    • e.g. master에서 feature start를 수행해도 develop 기준으로 브랜치 생성됨
  • merge/rebase 과정 중 문제가 발생해 처음부터 시작하고 싶으면 git rebase --merge 아니면 git rebase --abort
  • git reset --hard <커밋 해시> 를 통해 원하는 커밋 지점으로 돌아가서 다시 작업할 수 있음
    • git reset --soft <커밋 해시> 를 하면 커밋 지점으로 돌아가지만 작업 내용은 다시 커밋할 수 있게 남고 –hard 옵션을 쓰면 아예 지워짐
    • git reset --soft HEAD~1 바로 이전 시점 커밋으로 돌아가고 수정 파일도 작업한 상태로 돌아감
  • git stash 를 사용해 하던 내용을 임시저장하고 git stash apply 를 통해 다시 적용할 수 있음
  • –no-ff 옵션 없이 git flow feature finish 를 수행했을 때 실수로 지워진 브랜치 복구 가능함
    • git reset --hard HEAD~1
      • 바로 이전 커밋으로 돌아가며 수행 시 추가된 파일이나 수정된 코드 내용 다 없어짐
    • git reflog
      • git log 에 나오지 않는 git 에서 행동 기록을 통해 지워진 브랜치의 커밋을 찾을 수 있음
      • git reflog 는 로컬에 남아있는 기록임 (clone 해서 가져오면 다른 사람들에게는 존재하지 않음)
    • git checkout -b <브랜치명> HEAD@{reflog 커밋 헤드} 로 지워진 브랜치 원하는 시점 커밋으로 브랜치 생성
      • e.g. git checkout -b feature/PPP-6-blog HEAD@{2}
      • e.g. git checkout -b feature/PPP-6-blog <커밋 해시> 도 가능
    • git flow feature finish --no-ff PPP-6-blog 다시 실행

Leave a comment