본문 바로가기

Git

[Git] Git Flow 이해하기 - (3) Git Flow 브랜치 생성 및 병합

Git Flow 브랜치 생성 및 병합

1. 초기 설정

  • 새 폴더 생성 및 이동
mkdir git-flow-practice
cd git-flow-practice

 

  • Git 저장소 초기화
git init

 

  • 첫 번째 파일 생성
echo "프로젝트 시작" > project.txt

 

  • 첫 번째 커밋
git add project.txt
git commit -m "Initial commit"

 

  • GitHub에서 새 저장소 생성 (README 파일 생성 옵션 체크 해제)
  • 로컬 저장소와 원격 저장소 연결
git remote add origin https://github.com/your-username/git-flow-practice.git
git push -u origin master

 

2.  develop 브랜치 생성 (master에서 분기하여 생성)

  • develop 브랜치 생성 및 전환
git checkout -b develop
git pull origin develop  # 새로 생성된 브랜치지만, 안전을 위해 pull

 

  • project.txt 파일 수정
echo "개발 브랜치 생성" >> project.txt

 

  • 변경사항 커밋 및 푸시
git add project.txt
git commit -m "develop 브랜치 생성"
git push -u origin develop

 

3.  feature 브랜치 생성 및 작업 (develop에서  분기하여 생성)

  • feature 브랜치 생성
git checkout develop
git pull origin develop  # develop 브랜치 최신화
git checkout -b feature/login

 

  • project.txt 파일에 기능 추가
echo "로그인 기능 개발" >> project.txt

 

  • 변경사항 커밋
git add project.txt
git commit -m "로그인 기능 추가"
git push -u origin feature/login  # feature 브랜치 push 추가

 

  • develop 브랜치로 병합
git checkout develop
git pull origin develop # 병합 전 develop 브랜치 최신화
git merge feature/login
git push origin develop
git add project.txt
git commit -m "feature/login 병합 및 충돌 해결"
git push origin develop

 

  • feature 브랜치 삭제
git branch -d feature/login
git push origin --delete feature/login  # 원격 feature 브랜치 삭제

 

4.  release 브랜치 생성 (develop에서 분기하여 생성)

  • release 브랜치 생성
git checkout develop
git pull origin develop  # release 브랜치 생성 전 develop 최신화
git checkout -b release/1.0

 

  • project.txt 파일에 버전 정보 추가
echo "버전 1.0 준비" >> project.txt

 

  • 변경사항 커밋
git add project.txt
git commit -m "1.0 버전 준비"
git push -u origin release/1.0  # release 브랜치 push 추가

 

5.  release 브랜치 병합 및 태그 생성 (develop에서 분기하여 생성)

  • master 브랜치로 병합
git checkout master
git pull origin master  # master 브랜치 최신화
git merge release/1.0
git push origin master

 

  • 태그 생성 및 푸시
git tag -a v1.0 -m "버전 1.0 출시"
git push origin v1.0

 

  • develop 브랜치로도 병합
git checkout develop
git pull origin develop  # develop 브랜치 최신화
git merge release/1.0
git push origin develop

 

  • release 브랜치 삭제
git branch -d release/1.0
git push origin --delete release/1.0  # 원격 release 브랜치 삭제

 

6. hotfix 브랜치 생성 및 작업 (master에서 분기하여 생성)

  • hotfix 브랜치 생성
git checkout master
git pull origin master  # hotfix 브랜치 생성 전 master 최신화
git checkout -b hotfix/1.0.1

 

  • project.txt 파일에 버그 수정 내용 추가
echo "긴급 버그 수정" >> project.txt

 

  • 변경사항 커밋
git add project.txt
git commit -m "긴급 버그 수정"
git push -u origin hotfix/1.0.1  # hotfix 브랜치 push 추가

 

  • master와 develop 브랜치로 병합
git checkout master
git pull origin master  # 병합 전 master 최신화
git merge hotfix/1.0.1
git push origin master

git checkout develop
git pull origin develop  # 병합 전 develop 최신화
git merge hotfix/1.0.1
git push origin develop

 

  • 새 태그 생성 및 푸시
git checkout master
git pull origin master  # 태그 생성 전 master 최신화
git tag -a v1.0.1 -m "버전 1.0.1 긴급 수정"
git push origin v1.0.1

 

  • hotfix 브랜치 삭제
git branch -d hotfix/1.0.1
git push origin --delete hotfix/1.0.1  # 원격 hotfix 브랜치 삭제

 

 

push을 안 했더니 원격 저장소에 반영이 안 되어 다음과 같은 그래프가 나타났다.

 

코드를 바꿔봐도 여전히 다음과 같은 그래프가 나타난다.

 

왜 그럴까?

 

병합할 때 fast-forward가 발생해서 그런 것 같다. --no-ff 옵션을 준다면 브랜치 간의 관계가 그래프에서 명확하게 표시될 것이다. 다음과 같이 사용한다.

git checkout master 
git merge --no-ff feature
feature, release, hotfix 브랜치를 병합할 때 --no-ff를 사용하면 더욱 명확한 히스토리를 유지할 수 있다.

 

 

대신에 --no-ff 옵션을 사용하면 vi 편집기가 열려서 :wq로 종료해야 한다.