본문 바로가기
쿤즈 Dev/Git

[Git Flow] Git Flow 실습: Release 브랜치

by Koonz:) 2024. 6. 29.
728x90

안녕하세요! 이번 글에서는 Git Flow를 사용하여 릴리스 브랜치(release branch)를 생성하고 작업하는 방법을 자세하게 설명하겠습니다. 릴리스 브랜치는 소프트웨어 배포 준비를 위한 중요한 단계로, 최종 테스트와 버그 수정을 거쳐 안정적인 버전을 만드는 데 사용됩니다.

 

 

이번 글에서는 실제 예제를 통해 릴리즈 브랜치를 생성하고 작업하는 과정을 단계별로 알아보겠습니다.


release 브랜치

release 브랜치는 배포 준비를 위한 브랜치입니다. 이 브랜치는 develop 브랜치에서 분기되어 최종 테스트와 버그 수정을 거친 후 master 브랜치와 develop 브랜치로 병합됩니다.

release branch

릴리스 브랜치를 사용하면 배포 과정에서 새로운 기능이 추가되는 것을 방지하고, 안정적인 상태로 배포 준비를 할 수 있습니다.


주요 특징

release 브랜치는 다음과 같은 특징이 있습니다.

  • develop 브랜치에서 분기됩니다.
  • 배포 준비가 완료되면 master와 develop 브랜치로 병합됩니다.
  • 이름 규칙: release/[release version]

release 브랜치 생성

release 브랜치를 생성하는 첫 번째 단계는 develop 브랜치에서 새로운 릴리스 브랜치로 분기하는 것입니다. git flow에서는 이를 쉽게 수행할 수 있도록 명령어를 제공합니다.

# Git 명령어
$ git checkout develop
$ git checkoub -b release/1.0.0

# Git Flow 명령어
$ git flow release start 1.0.0

 

🧑🏻‍💻 Git 명령은 Terminal
Git 명령어는 터미널에서 하는 것으로 연습합니다. 처음에는 어려울 수 있으나 익숙함의 차이라 생각합니다.

 

위 명령어를 실행하면 develop 브랜치에서 release/1.0.0 브랜치가 생성되고 해당 브랜치로 전환됩니다.

$ git flow release start 1.0.0 --showcommands

git config --local gitflow.branch.release/1.0.0.base develop
git checkout -b release/1.0.0 develop
Switched to a new branch 'release/1.0.0'

Summary of actions:
- A new branch 'release/1.0.0' was created, based on 'develop'
- You are now on branch 'release/1.0.0'

Follow-up actions:
- Bump the version number now!
- Start committing last-minute fixes in preparing your release
- When done, run:

     git flow release finish '1.0.0'

 

 

이제 릴리스 준비를 시작할 준비가 되었습니다.


Release 브랜치에서 작업하기

Release 브랜치가 생성되었으니 이제 배포 준비를 위해 최종 테스트와 버그 수정을 수행할 수 있습니다. 예를 들어, 새로운 기능을 추가하고 변경 사항을 커밋합니다.

# 기존 파일 버그 수정
$ echo "Test & Bugfix" >> new-feature-file.txt

# 변경 사항 확인
$ git status
On branch release/1.0.0
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   new-feature-file.txt

no changes added to commit (use "git add" and/or "git commit -a")

# 변경 사항 스테이징
$ git add new-feature-file.txt

# 변경 사항 스테이징 확인
$ git status
On branch release/1.0.0
Changes to be committed:
  (use "git restore --staged <file>..." to unstage)
	modified:   new-feature-file.txt

# 변경 사항 커밋
$ git commit -m "Bugfix new-feature-file"
[release/1.0.0 300f2d5] Bugfix new-feature-file
 1 file changed, 1 insertion(+)

 

echo를 이용해서 new-feature-file.txt에 데이터를 추가합니다. 이는 파일이 수정되었다고 가정하기 위함입니다.

파일이 수정되었다면 status를 이용해서 수정된 파일의 목록을 확인하고 이번에 반영된 소스들을 확인합니다. 확인 이후에는 수정된 파일을 커밋하기 전 스테이징으로 반영하고 커밋을 진행합니다.

 

변경 사항이 release/1.0.0 브랜치에 커밋되었습니다. 최종 테스트를 통해 추가적인 버그를 찾고 추가할 수 있습니다.


Release 브랜치 병합

Release 준비가 완료되면 release/1.0.0 브랜치를 master 브랜치와 develop 브랜치에 병합해야 합니다. 

# Git 명령어
$ git checkout master
$ git merge --no-ff release 1.0.0
$ git tag -a 1.0.0
$ git checkout develop

# tag를 이용해 back-merge 또는 release 브랜치를 바로 머지
# 둘 중 하나를 사용

# tag를 이용한 back-merged
$ git merge --no-ff 1.0.0
# 브랜치를 develop에 merged
$ git merge --no-ff release/1.0.0

$ git branch -d release/1.0.0


# Git Flow 명령어
$ git flow release finish 1.0.0

 

release 브랜치를 master 브랜치와 develop 브랜치로 병합하면서 tag까지 생성하도록 합니다. git을 사용하면 다음과 같은 과정을 직접 진행해야 합니다.

  1. master 브랜치로 이동
  2. release/1.0.0 브랜치를 master 브랜치에 병합
  3. release 태그 생성
  4. develop 브랜치로 이동
  5. tag를 이용한 back-merge 또는 release 브랜치를 develop에 머지
  6. release/1.0.0 브랜치 삭제

위와같이 6단계를 거쳐서 git 명령어를 사용하는데 반해 git flow 명령어는 이 과정을 하나의 명령어로 해결할 수 있습니다.

$ git flow release finish 1.0.0 --showcommands

git checkout master
Switched to branch 'master'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
 new-feature-file.txt | 2 ++
 1 file changed, 2 insertions(+)
 create mode 100644 new-feature-file.txt
git checkout master
Already on 'master'
git tag -a 1.0.0
git checkout develop
Switched to branch 'develop'
git merge --no-ff 1.0.0
Merge made by the 'ort' strategy.
 new-feature-file.txt | 1 +
 1 file changed, 1 insertion(+)
git branch -d release/1.0.0
Deleted branch release/1.0.0 (was 300f2d5).

Summary of actions:
- Release branch 'release/1.0.0' has been merged into 'master'
- The release was tagged '1.0.0'
Merge branch 'release/1.0.1'
- Release tag '1.0.0' has been back-merged into 'develop'
- Release branch 'release/1.0.0' has been locally deleted
- You are now on branch 'develop'

 

--showcommands 옵션을 사용해서 내용을 보면 우리가 보던 그림과는 다르다는 사실을 알 수 있습니다. 우리는 release 브랜치를 그대로 develop 브랜치에 병합하는 것으로 알고 있지만 tag를 저장하고 tag를 develop으로 back-merge 하는 것을 볼 수 있습니다. 만약 우리가 아는 git flow 방법대로 병합을 진행하고 싶다면 다음과 같이 옵션(-b)을 추가해 줍니다.

 

$ git flow release finish 1.0.0 -b --showcommands

git checkout master
Switched to branch 'master'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
 new-feature-file.txt | 1 +
 1 file changed, 1 insertion(+)
git checkout master
Already on 'master'
git tag -a 1.0.0
git checkout develop
Switched to branch 'develop'
git merge --no-ff release/1.0.0
Merge made by the 'ort' strategy.
 new-feature-file.txt | 1 +
 1 file changed, 1 insertion(+)
git branch -d release/1.0.0
Deleted branch release/1.0.0 (was 4294c7c).

Summary of actions:
- Release branch 'release/1.0.0' has been merged into 'master'
- The release was tagged '1.0.0'
- Release branch 'release/1.0.0' has been merged into 'develop'
- Release branch 'release/1.0.0' has been locally deleted
- You are now on branch 'develop'

 

Git flow 명령어를 실행하면 다음과 같이 3가지 과정이 있습니다.

먼저 Commit 메세지를 입력하도록 합니다. 기본 문장은 "Merge branch 'release/1.0.0'으로 나와있습니다.

Merge branch 'release/1.0.0'
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

 

쉘로 나오기 때문에 저장하고 종료하기 위해서는 :wq 라 입력해줍니다. w는 write, q는 quit으로 저장하고 종료한다는 내용입니다. 저장하고 종료하면 다음 물음이 나타납니다.

# Write a message for tag:
   1.0.0
# Lines starting with '#' will be ignored.

 

이번에는 태그를 저장하는 단계입니다. 이 태그는 1.0.0 앞에 #이 붙어 있는데 이는 제거해서 태그를 추가하거나 바로 :wq를 이용해서 추가하지 않을 수도 있습니다.

 

이 실습에서는 #으로 이동해서 x를 눌러서 제거하고 :wq 로 종료합니다.

 

마지막으로 develop으로 머지되는 Commit 메세지 입니다. master 브랜치와 develop 브랜치로 머지하기 때문에 각각의 커밋메시지가 필요합니다.

 

Merge tag '1.0.0' into develop

   1.0.0
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.

 

마찬가지로 :wq를 이용해서 저장후 종료하면 작업이 완료됩니다.


Release 브랜치의 장점

Release 브랜치를 사용하는 것은 여러 가지 장점을 제공합니다.

 

  1. 안정성 확보: 릴리즈 브랜치를 통해 최종 테스트와 버그 수정을 독립적으로 수행할 수 있어, 배포 시 코드의 안정성을 보장할 수 있습니다.
  2. 체계적인 배포 과정: 릴리스 브랜치를 사용하면 배포 과정이 체계적으로 이루어지며, 새로운 기능이 배포 준비 중에 추가되는 것을 방지할 수 있습니다.
  3. 명확한 버전 관리: 각 릴리스에 대해 명확한 버전 번호를 부여하고 태그를 생성할 수 있어, 나중에 특정 버전으로 쉽게 되돌아갈 수 있습니다.
  4. 효율적인 버그 수정: 배포 준비 과정에서 발견된 버그를 빠르게 수정하고 테스트할 수 있어, 배포 전 코드의 품질을 높일 수 있습니다.

이번 글에서는 Git Flow를 사용하여 릴리즈 브랜치를 생성하고 작업하는 방법에 대해 자세히 알아보았습니다. release 브랜치를 통해 개발자는 최종 테스트와 버그 수정을 독립적으로 수행하고, 안정적인 상태로 배포를 준비할 수 있습니다. 릴리즈가 완료되면 master 브랜치와 develop 브랜치에 병합하여 최신 상태를 유지할 수 있습니다. 이는 팀 전체의 협업 효율성을 크게 향상시키고, 코드의 안정성을 보장하는 데 도움이 됩니다.

 

다음 글에서는 Git Flow를 사용하여 긴급 버그 수정을 위한 핫픽스 브랜치를 생성하고 병합하는 빙법에 대해 자세히 알아보겠습니다. 이 글이 도움이 되시길 바랍니다. 궁금한 내용이 있다면 댓글로 질문해 주세요. 감사합니다.

 

이전 글

 

 

[Git Flow] Git & Git flow 소개

안녕하세요. 이번 시리즈에서는 Git flow(깃 플로우)에 대해서 알아볼게요. Git flow를 알기 전에 Git에 대해서 먼저 알아야 해요. 서비스, 커머스 기타 등등의 많은 회사들에서 대부분 사용하고 있는

koonsland.tistory.com

 

 

[Git Flow] Git Flow 설치 및 설정

Git Flow에 대해서 알아봤어요. Git Flow는 소프트웨어 개발에서 Git 브랜치를 효과적으로 관리하기 위한 워크플로우입니다. 그래서 Git Flow를 사용하면 팀 전체가 체계적으로 작업할 수 있으며, 코드

koonsland.tistory.com

 

 

[Git Flow] Git Flow 브랜치 모델

안녕하세요. 지난 포스팅에서는 Git Flow 소개와 기본개념, 그리고 Git Flow 설치 및 설정을 하는 방법에 대해 알아보았어요. Git이 우선이고 사용을 조금 더 쉽고 편리하게 하기 위한 툴이 Git Flow입니

koonsland.tistory.com

 

 

[Git Flow] Git Flow 실습: Feature 브랜치

이번 글에서는 Git Flow를 사용하여 feature 브랜치를 생성하고 작업하는 방법을 자세히 알아볼게요. Git Flow의 강력한 브랜치 관리 시스템을 통해 개발자는 보다 체계적으로 기능을 개발하고 통합할

koonsland.tistory.com

 

 

 

 

 

 

 

 

 

 

 

 

댓글