ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Git] Git의 다양한 merge 방법 이해하기 (Merge / Squash & Merge / Rebase & Merge)
    📖 개발 공부/git 2023. 5. 28. 16:13

    Merge

    커밋 이력을 모두 남길 때 사용한다. 일반적으로 많이 사용된다.

    https://lukemerrett.com/different-merge-types-in-git/

     

    두 개 이상의 브랜치를 병합하여 새로운 커밋을 만든다. 병합 커밋은 두 브랜치의 변경 내용을 모두 포함하며, 두 브랜치의 변경 내용이 충돌할 경우 사용자가 충돌을 해결해야 한다.

    merge를 사용하면 병합된 커밋 히스토리가 남기 때문에 브랜치 간의 관계가 명확하게 나타난다.

     

    여기엔 두가지 옵션이 있다.

     

    fast-forward 옵션

    • 대상 브랜치의 최신 커밋이 현재 브랜치의 커밋을 포함하고 있는 상태로 브랜치 포인터(각 브랜치의 최신 커밋을 가리키는 참조)를 이동시킨다.
    • fast-forward 병합은 병합 대상 브랜치의 커밋 히스토리가 현재 브랜치의 커밋 히스토리에 뒤쳐져 있을 때 사용된다. 이 경우, 단순히 현재 브랜치를 대상 브랜치로 이동시키면 되므로 별도의 커밋이 생성되지 않는다.


    recursive 옵션

    • recursive 방식은 두 브랜치의 공통 조상 커밋을 기준으로 변경 내용을 비교하고, 충돌이 발생하는 경우 사용자에게 충돌 해결을 요구한다.
    • recursive 병합은 merge 작업을 수행하는 가장 기본적인 방식이다. 이 방식은 병합 커밋을 생성하여 두 브랜치의 변경 내용을 하나로 통합한다.

    각 브랜치의 변경 내용이 모두 병합 커밋에 포함되기 때문에 커밋 히스토리가 상대적으로 더 복잡해질 수 있다. 하지만 브랜치 간의 관계와 개별적인 커밋을 보여줌으로써 변경 내용을 이해하기 쉽게 해준다.

    Squash & Merge

    squash & merge는 병합할 브랜치의 모든 커밋을 하나로 압축하여 하나의 새로운 커밋을 만드는 방법이다.

    이 방법을 사용하면 브랜치의 모든 변경 내용을 하나의 커밋으로 합칠 수 있다. 따라서 브랜치의 커밋 히스토리가 깔끔하게 유지된다. squash & merge는 기능적인 변경 내용을 한 번에 확인하고 리포지토리의 커밋 히스토리를 깔끔하게 유지하고자 할 때 유용하다.

     

    https://lukemerrett.com/different-merge-types-in-git/

    • 장점
      • 커밋 히스토리를 깔끔하게 유지할 수 있다. 모든 브랜치의 커밋을 하나의 압축된 커밋으로 합치므로, 커밋 히스토리가 간결하고 읽기 시워진다.
      • 기능 단위로 변경 내용을 파악하기 쉽다. 각 기능이나 작업 단위별로 커밋을 합치므로, 변경 내용을 명확하게 구분할 수 있다. 이는 변경 내용의 의도와 목적을 잘 표현할 수 있다.
    • 단점
      • 개별적인 커밋의 히스토리가 손실된다. 커밋을 압축하면 개별 커밋의 이력이 사라지므로, 특정 커밋의 변경 내용을 추적하기가 어려워진다.
      • 다른 개발자와의 협업이 어려울 수 있다. squash & merge를 사용하면 커밋 히스토리가 변경되므로, 다른 개발자들이 해당 브랜치를 기반으로 작업할 때 문제가 발생할 수 있다.

    Rebase & Merge

    rebase & merge는 병합할 브랜치의 커밋을 현재 브랜치의 최신 커밋 위에 재배치(rebase)하여 병합하는 방법이다.

    이 방법은 브랜치의 커밋 히스토리를 선형으로 유지할 수 있도록 도와준다. 또한 병합된 커밋 히스토리가 더 깔끔해지고 이해하기 쉬워진다.

    https://lukemerrett.com/different-merge-types-in-git/

    • 장점
      • 커밋 히스토리를 선형적으로 유지할 수 있다. 병합된 커밋이 현재 브랜치의 최신 커밋 위에 재배치되므로, 커밋 히스토리가 단순하고 직관적으로 유지된다.
      • 변경 내용을 명확하게 이해하기 쉽다. 커밋이 선형적으로 정렬되므로, 변경 내용을 단계별로 파악하고 이해하기 용이하다.
      • 충돌 해결이 비교적 쉽다. rebase 작업을 통해 충돌이 발생하면, 해당 커밋 단위로 충돌을 해결하면 된다
    • 단점
      • 커밋 히스토리를 변경하므로 주의가 필요한다. rebase & Merge 작업은 커밋 히스토리를 재배치하고 변경하기 때문에, 이미 공유된 커밋 히스토리에 대한 변경이 발생한다. 다른 개발자들이 해당 브랜치를 기반으로 작업하는 경우에는 커밋 히스토리의 변경으로 인해 문제가 발생할 수 있다.

     

    🔗  참고

     

    병합과 기준 재지정(rebase) 비교 | Atlassian Git Tutorial

    관련된 git merge 명령으로 git rebase를 비교하고 잠재적인 모든 기회를 식별하여 일반 Git 워크플로우로 기준 재지정을 통합합니다.

    www.atlassian.com

     

    Different Merge Types in Git

    Demystifying the difference between "Merge", "Fast Forward Merge", "Squash and Merge" and "Rebase and Merge" on Git

    lukemerrett.com

     

    반응형

    댓글

Designed by Tistory.