코드잇 스프린트 2주차 위클리페이퍼✏️
Q1. Git에서 branch merge 방법들과 각 방법의 특징을 설명해 주세요.
A. branch merge하는 방법 3가지
-
merge commit을 만들며 합치기
- 두 브랜치의 변경 사항을 모두 유지하면서 병합한다.
- 각 브랜치의 변경 사항이 과거의 커밋으로 보존되고, 새로운 커밋이 추가되어 최종 병합이 완료된다.
git checkout A
git merge B
-
장점
- 브랜치의 히스토리를 모두 유지하면서 변경 사항을 병합할 수 있다.
- 프로젝트의 진행 상황을 명확하게 이해하고 추적할 수 있다.
- 모든 커밋들의 ID가 바뀌는 경우가 없기 때문에 squash와 rebase 방식에 비해 비교적 사용이 쉽다.
-
단점
-
Rebase and merge 하기
- 현재 브랜치를 target 브랜치에 재위치(rebase)시킨 후 병합하는 방식
- target 브랜치의 커밋 위로 현재 브랜치의 모든 커밋을 옮겨 놓는 것과 같다. 이렇게 되면 커밋 히스토리는 선형적으로 유지된다.
git checkout A
git pull --rebase origin B
git push origin A
-
장점
- 깨끗하고 선형적인 커밋 히스토리를 만들어 준다.
- 히스토리 파악 및 코드의 변화 이해가 더욱 쉬워질 수 있다.
-
단점
- 관련된 커밋의 ID들이 모두 바뀌게 되어 혼란을 초래할 수 있다.
-
Squash and Merge 하기
- 브랜치에서의 모든 변경 사항을 하나의 커밋으로 압축하여 병합하는 방식
- 각각의 커밋에서 발생한 모든 변경 사항을 병합 후에 하나의 새로운 커밋을 생성한다.
git checkout A
git merge --squash B
git commit -m "Squashed commit message"
-
장점
- 커밋 히스토리를 간단하게 유지할 수 있다.
- 각 커밋이 특정 Pull Request를 대변하게 되고, 이해하기 쉬워진다.
- 커밋 하나하나가 완성된 기능을 의미하게 된다.
-
단점
- 작업의 상세한 이력을 잃게 된다.
- 각 커밋에 대한 개별적인 맥락이나 작업자의 정보 등이 포함되지 않아 문제 해결이 어려워질 수 있다.
- 기존 작업 커밋의 ID들이 하나로 합쳐지며 사라지고 새로운 커밋 아이디가 생성되기 때문에 여러명이서 해당 브랜치를 기반으로 작업을 수행하고 있었다면 병합이 이뤄지는 경우 복잡한 문제를 야기한다.
Q2. Git Flow 브랜치 전략에 대해 설명해 주세요.
A. Git Flow란?
Git Flow는 Vincent Driessen이 제안한 Git 브랜치 전략 중 하나로, 프로젝트를 유연하게 관리하고 기능 개발, 버그 수정, 릴리스 관리를 효과적으로 수행할 수 있도록 도와주는 방법론이다.
-
master
- 제품으로 출시될 수 있는 브랜치
master 브랜치는 실제 사용되고 있는 운영 환경에서 동작 중인 코드를 반영한다.
- 모든 기능이나 버그 수정이 완료되면 이 브랜치로 머지되어 새로운 릴리스를 만든다.
-
develop
- 다음 출시 버전을 개발하는 브랜치
- 기능 개발이나 버그 수정이 완료되면 이 브랜치로 머지된다.
-
feature
- 기능을 개발하는 브랜치
- 각 기능은 별도의 브랜치에서 개발되며, 완료되면
develop 브랜치로 머지된다.
-
release
- 이번 출시 버전을 준비하는 브랜치
develop 브랜치에서 머지되고, 버그 수정이 필요하면 해당 수정이 진행된다.
- 최종적으로
master 브랜치와 develop 브랜치로 머지되어 릴리스가 완료된다.
-
hotfix
- 출시 버전에서 발생한 긴급한 버그를 수정할 때 사용된다.
master 브랜치에서 머지되고, 수정된 내용은 master와 develop 브랜치로 다시 머지된다.
Git Flow 전략을 사용하면 프로젝트의 효율적인 버전 관리와 협업이 가능하며, 각 브랜치의 목적이 명확하게 정의되어 있어 협업 과정에서 발생하는 문제를 최소화할 수 있다.