본문 바로가기

git

git flow - hotfix 작업방법

기존에 hotfix 브랜치에 작업할 내용이 없었는데, 이번 기회에 hotfix로 작업을 해보게 되었다. 

git은 언제나 어려워~ 

 

1) hotfix 브랜치를 popup 이라는 버전의 이름으로 작업할 것

git flow hotfix start popup

hotfix로 작업을 하려고 하니 아래와 같은 에러가 발생하였다. 

Fatal: Not a gitflow-enabled repo yet. Please run 'git flow init' first.

 

2) git flow init 하면 아래와 같이 브랜치를 설정하는 리스트가 쭉 뜬다. 

Which branch should be used for bringing forth production releases?
Which branch should be used for integration of the "next release"?

그냥 디폴트 옵션으로 하고 싶으면 git flow init -d 를 주면 된다고 한다. 

나도 그냥 디폴트로 쭉 설정했다 [main], [develop] -> 우리팀의 경우 master 브랜치가 아닌 develop 브랜치다.

 

How to name your supporting branch prefixes?

이것도 feature branch, Bugfix branch, Release branch 등등 해서 나오는데 그냥 엔터로 넘겼다. 

 

3) 드디어 hotfix 브랜치 start 하려고 했으나 

레포지터리 이름 git:(main) git flow hotfix start popup

Branches 'main' and 'origin/main' have diverged.
Fatal: And branch 'main' may be fast-forwarded. 

 

diverged는 '갈라지다'라는 뜻이다. 둘의 브랜치가 sync가 맞아 합쳐져야 하는데 맞지 않아서 생기는 문제이다. 

 

main 브랜치가 origin/main보다 더 앞서가있다고, main 브랜치 업데이트를 해줘야 했다.

이건 그냥 intelliJ 우측 하단에 있는 화살표 Update를 통해 진행해주었다. 

 

or git pull 을 통해 업데이트를 진행시켜주어 main과 origin/main과의 sync를 맞춰주면 된다. 

 

4) main과 origin/main sync 맞추고 나서 다시

레포지터리 이름 git:(main) git flow hotfix start popup

하면 새로 만든 'hotfix/popup' 브랜치로 전환합니다 라며 popup이라는 핫픽스 브랜치에 이제 작업을 하라고 한다.

 

5) 작업이 끝나면 finish로 핫픽스 브랜치 끝내주기 

레포지터리 이름 git:(hotfix/popup) git flow hotfix finish popup

그럼 이제 어떤 작업을 해줬는지 터미널에 출력된다. 

 

처음에는 main에 반영되고, 그 다음에는 develop 브랜치에 반영이 되는데 이번엔 또 develop 브랜치가 싱크가 맞지 않아 main에서 났던 오류가 또 발생해 똑같이 해결해줬다. 

Summary of actions:
- Hotfix branch 'hotfix/popup' has been merged into 'main'
- The hotfix was tagged 'popup'
- Hotfix tag 'popup' has been back-merged into 'develop'
- Hotfix branch 'hotfix/popup' has been locally deleted
- You are now on branch 'develop'

이를 통해 main과 develop 브랜치 둘다 반영이 되는 것이다. 

 

6) 태그 생성하고 push 하기 

레포지터리 이름 git:(develop) git push \--tags

태그는 왜 쓰는걸까?에 대해 궁금해서 찾아보니, Git Tag는 versioning을 위해 사용되는 Pointer 라고 한다. 

특정 커밋 해시를 가리킨다. 

 

7) 최종적으로 develop과 main에 반영된것을 확인할 수 있다.