Git Flow - 3. 사용법 요약 및 팁
본 포스트에서는 커맨드를 활용한 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 .githooks
→chmod +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 ‘[이슈번호] 타입: 커밋 설명'
- feature 브랜치 작업:
- 타입 종류: Feat, Fix, Hotfix, Refactor, Docs, Style, Test, Chore
기타 git 관리 방법
- 개발 작업 중 주기적으로 원격 저장소의 develop 브랜치의 내용을 rebase pull 로 반영
- feature 브랜치 작업 중
git pull --rebase origin develop
을 통해 주기적으로 다른 사람 작업 내용 반영 - feature 브랜치 finish 전에도 한 번 체크
- feature 브랜치 작업 중
- 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 <커밋 해시>
도 가능
- e.g.
git flow feature finish --no-ff PPP-6-blog
다시 실행
Leave a comment