브랜치(branch)란 무엇인가?

프로그램 소스 버전을 관리하기 위한 개념으로, 간단히 말하면 복사본이다. "Branch"라는 이름 그대로, 원본에서 가지치기해서 복사한 소스를 가지고 별도의 버전을 새로 생성하는 것.

그렇다면 머지(merge)는 뭐지?

현재 branch를 다른 branch와 병합하는 과정.

단어 뜻 자체가 병합!

머지(merge)하는 방법

Fast-Forward merge

git merge 명령어를 사용해 브랜치를 병합할 때, 현재 브랜치가 병합할 브랜치의 직계 조상일 경우에 사용하고, 커밋 히스토리가 직선 형태로 유지되는 특징이 있다.

$ git checkout main
$ git merge feature

예를 들어, main branch에서 feature branch를 병합할 때 feature branch에서 새로운 커밋이 추가되지 않았다면 단순히 포인터를 이동한다.

✅장점

  • 히스토리가 깔끔하고 이해하기 쉽다.
  • 커밋 기록이 단순해서 추적이 용이하다.

⛔단점

  • 여러 개발자가 동시에 작업하면서 머지(merge, 병합)을 자주할 경우 히스토리가 단조로워질 수 있다.

Three-Way Merge

두 브랜치가 서로 다른 커밋을 가진 경우, git은 세 개의 커밋을 비교하여 병합한다. (공통 조상, 현재 브랜치의 최신 커밋, 병합할 브래치의 최신커밋)

기본적으로 git이 자동으로 충돌을 해결하고, 충돌이 발생할 경우 수동으로 해결해야 한다는 특징이 있다.

✅장점

  • 두 브랜치의 변경사항을 모두 반영할 수 있어, 기능이나 버그 수정이 잘 통합된다.
  • 여러 개발자들이 작업한 내용을 쉽게 병합할 수 있다.

⛔단점

  • 충돌이 발생할 경우, 수동으로 해결해야 하므로 추가적인 작업이 필요하다.
  • 히스토리가 복잡해질 수 있다.

Squash Merge

여러 커밋을 하나의 커밋으로 합치는 방식, 주로 기능 개발이 완료된 후, 커밋 기록을 정리하고 싶을 때 사용한다.

$ git checkout main
$ git merge --squash feature
$ git commit -m "Feature implemented"

feature 브랜치의 모든 커밋이 하나의 커밋으로 압축되어 main 브랜치에 추가된다.

✅장점

  • 히스토리가 깔끔하게 유지되고 기능단위로 커밋을 정리 할 수 있다.
  • 필요없는 중간 커밋 제거 가능, 프로젝트 이력이 더 명확해진다.

⛔단점

  • 원래의 커밋 히스토리를 잃게 되어 문제가 발생했을 때 원인을 추적하기 어려울 수 있다.
  • 협업시 각 개발자의 작업 내용을 상세히 기록하지 않기 때문에 나중에 코드 리뷰가 어려워질 수 있다.

Rebase Merge

한 브랜치의 커밋을 다른 브랜치의 끝으로 이동시키는 과정이다. 주로 기능 브랜치를 메인 브랜치의 최신 상태로 업데이트할 때 사용한다.

$ git checkout feature
$ git rebase main

feature 브랜치의 커밋이 main 브랜치의 최신 커밋 뒤로 이동한다. 이 과정에서 충돌이 발생할 수 있으며, 충돌을 해결한 후 진행해야 한다.

✅장점

  • 커밋 이력이 선형으로 유지, 이력 추적에 용이하다.
  • 협업시 최신 변경 사항을 쉽게 반영할 수 있다.

⛔단점

  • 이미 원격에 푸시된 커밋을 리베이스 할 경우 다른 개발자와 충돌이 발생될 수 있다. 원격에 푸시하기 전 주의!
  • 복잡한 커밋 히스토리를 가진 경우에는 충돌 해결이 번거로울 수 있다.

‼️결론

상황에 따라 적절한 방법을 이용해 사용하면 될 듯 하다.

Fast-Forward Merge는 간단한 경우에 유용하고, Three-Way Merge는 복잡한 상황에서 강하며, Squash Merge는 히스토리를 정리하고 싶을 때 유용하고, Rebase는 커밋 이력을 선형으로 유지하며 최신 변경 사항을 반영할 때 사용한다.

'코린이 개념잡기 > GIT' 카테고리의 다른 글

Git Flow 브랜치 전략  (0) 2024.12.13
HEAD와 branch의 관계  (0) 2024.12.09
branch  (0) 2024.12.09
커밋 다루기  (0) 2024.12.08
커밋 메시지 작성하기  (1) 2024.12.08

+ Recent posts