Branch merge와 Git flow

INK·2023년 12월 1일
post-thumbnail

branch merge란

현재 branch에서 다른 branch를 합칠 때 사용된다

특정 branch로 합치게 해달라고 요청하는 pull request로 세 가지 방식 중 하나를 선택할 수 있다.

  1. create a merge commit
  2. squash and merge
  3. rebase and merge

각각 방식마다 커밋 메세지, 커밋 그래프를 어떻게 유지해야 할 지와 연관되어 있기 때문에 이렇게 나누어 관리한다.

Merge(create a merge commit)

업로드중..

일반적으로 많이 사용하는 merge방법이며 커밋 이력을 모두 남길 때 사용된다. 장점이자 단점은 모든 커밋과 분기했던 branch 히스토리가 남는다는 것.

Fast-forward설정이란?

git merge-ff 옵션이 기본으로 설정되어 있는데, 이는 base브랜치가 이후 변경 내용이 없는 최신 브랜치일 경우 병합한다는 커밋 없이 합치고, 그렇지 않은 경우 병합 커밋을 남기고 합한다.

github의 merge and pull requestgit merge -—no-ff 옵션으로 base 브랜치가 최신 브랜치라 할지라도 커밋을 남기도록 강제한다.

Squash and merge

업로드중..

git merge-squash 옵션을 추가한 방법이다. 분기했던 branch에 있던 내용 a, b, c커밋을 모두 합쳐 하나의 새로운 커밋을 만든다.

지저분한 커밋 히스토리들을 하나로 합쳐서 기능상 의미있는 하나의 커맛만 남길 때 사용한다. 잘못 사용해 과도한 생략을 하게 되면, 추후 변경 파악이 힘들 수 있다.

Merge VS Squash and merge

Rebase and merge

분기했던 branch의 기준을 최신 base로 정하고, merge하는 방법이다. 결과적으로는 git merge -ff과 같은 상황이 된다

rebase하면 커밋들의 base가 변경되어 커밋해서 또한 변경될 수 있다. 이런 경우 git push -f해야 할 수 있다. 머지 커밋을 남길 필요가 없는 merge에 하면 좋다. 커밋 그래프가 하나의 라인으로 그려져 가독성이 뛰어나다.

Git flow란?

업로드중..

브랜치를 나누는 방법에 대한 분류 중 하나이다. Git flow의 특징은 브랜치를 5종류로 나눈다.

  1. main(master) : 출시 가능한 프로덕션 코드를 모아두는 브랜치이다. Main 브랜치는 프로젝트 시작 시 생성되며, 개발 프로세스 전반에 걸쳐 유지된다. 배포된 각 버전을 Tag를 이용해 표시해둔다.
  2. feature : 하나의 기능을 개발하기 위한 브랜치이다. Develop 브랜치에서 생성하며, 기능이 개발 완료되면 다시 Develop 브랜치로 머지된다. 머지할때 주의점은 Fast-Forward로 머지하지 않고, Merge Commit을 생성하며 머지를 해주어야 한다. 이렇게해야 히스토리가 특정 기능 단위로 묶이게 된다.
    • 네이밍은 feature/branch-name 과 같은 형태로 생성한다.
  3. develop : 다음 버전 개발을 위한 코드를 모아두는 브랜치이다. 개발이 완료되면, Main 브랜치로 머지된다.
  4. release : 소프트웨어 배포를 준비하기 위한 브랜치이다. Develop 브랜치에서 생성하며, 버전 이름 등의 소소한 데이터를 수정하거나 배포전 사소한 버그를 수정하기 위해 사용된다. 배포 준비가 완료되었다면 Main과 Develop 브랜치에 둘다 머지한다. 이때, Main 브랜치에는 태그를 이용하여 버전을 표시한다. Release 브랜치를 따로 운용함으로써, 배포 업무와 관련없는 팀원들은 병렬적으로 Feature 브랜치에서 이어서 기능을 개발할 수 있게된다.
    • 네이밍은 release/v1.1 과 같은 형태로 생성한다.
  5. hotfix : 이미 배포된 버전에 문제가 발생했다면, Hotfix 브랜치를 사용하여 문제를 해결한다. Main 브랜치에서 생성하며, 문제 해결이 완료되면 Main과 Develop 브랜치에 둘다 머지한다. Release 브랜치와 마찬가지로 Hotfix 브랜치를 따로 운용함으로써, 핫픽스 업무와 관련없는 팀은 병렬적으로 기능 개발을 할 수 있다.
    • 네이밍은 hotfix/v1.0.1 과 같은 형태로 생성한다.

main, develop은 필수 브랜치이지만 나머지 브랜치는 유지 보수를 목적으로 하는 선택적 브랜치이다. 본인 프로젝트와 스타일에 따라 커스터마이징하여 브랜치 이용 가능하다.

profile
망고짱쉬룸

0개의 댓글