Merge

Park sang woo·2024년 1월 16일

4주차 Git, Github

목록 보기
3/4

📓 Merge

  • fast-forward
  • 3-way merge
  • squash merge



🏷️ fast-forward (빨리감기)

단순하게 새로운 커밋이 생성되지 않고, 기존 커밋을 이동하여 병합이 이루어지는 방식이다. HEAD의 위치만 변경된다.

  1. 목표 브랜치가 현재 작업 중인 브랜치보다 앞서 있다.

    • 그림에서 'main'이 현재 브랜치고 'feature-branch'에서 작업한 내용을 "main"으로 merge할려고 할 때 'main'의 최신 커밋 'C'가 'feature-branch"의 가장 최근 커밋 'E'보다 앞서 있는 경우가 fast-forward Merge가 가능한 상황이다.

    • 그러면 "git merge feature-branch" 실행하면 'main'이 'feature-branch'의 가장 최근 커밋인 'E'를 가리키도록 업데이트 된다.

  2. 병합을 수행하기 전에 아무런 추가 커밋이 없다.

    • 현재 브랜치에서 "git merge" 을 실행하기 전에 추가적인 커밋이 없어야 한다.

🌬️ 결과 : 단순히 'main' 브랜치가 'feature-branch'의 최신 커밋을 가리킴



추가 그림


단순히 브랜치 HEAD를 앞으로(forward) 이동 시키는 방식의 브랜치 병합.




🏷️ 3-way merge

세 개의 커밋을 기반으로 병합을 수행하여 내 브랜치 커밋과 다른 브랜치 커밋을 병합하여 새로운 커밋을 생성하는 것이다.

  1. 병합하려는 두 브랜치의 공통 조상인 'B'

  2. 병합 대상 브랜치와 현재 브랜치를 비교해보면 'main'에서는 'B'이후에 'C'가 추가, 'feature' 에서는 'D','E'가 추가.

  3. 변경 내용이 서로 겹치지 않고 'main'브랜치에서의 추가 커밋이 'C'라면 3-way merge 가능

  4. 'main' 브랜치를 'feature'의 가장 최신 커밋인 'E'로 이동 시킨 후, 새로운 병합 커밋 'F'를 생성.


🌬️ 결과 : 그러면 'main'브랜치는 'C'에서의 분기한 이후의 변경 내용과 'feature' 브랜치의 변경 내용을 통합한 것이다.




🏷️ Squash merge

여러 개의 연속된 커밋을 하나의 커밋으로 합치는 Git 작업.
이를 통해 Git 히스토리를 보다 간결하고 이해하기 쉽게 만들 수 있습니다. Squash를 사용하면 여러 작은 커밋들을 하나의 큰 의미 있는 커밋으로 합쳐서 히스토리를 정리할 수 있다.

🌬️ 결과 : 'F'는 A,B,C,D,E가 합쳐진 커밋을 나타낸다. 이렇게 하면 더 간결하고 의미 있는 커밋 히스토리를 유지할 수 있다.



Squash와 Rebase 차이

쉽게말해 Squash 는 통합커밋 딱 하나를 master 브랜치 뒤에 붙여주는 방식이고, Rebase 는 서브브랜치의 여러 커밋들을 뒤에 붙여주는 방식이다.






📓 그리면서 정리


  • Fast-Forward : Remote 에 내 작업과 겹치는 어떠한 타인의 작업도 없을때, 그대로 이어 붙이기
  • 3-Way Merge : Remote 에 있는 타인의 작업 그대로, 내 작업 그대로 보존하고 머지 커밋 생성

  • Squash Merge : Remote 에 있는 타인의 작업 기준으로 다시 내가 작업하여 하나의 커밋으로 뭉쳐 생성





Rebase와 FF 차이

Rebase는 하나의 브랜치가 다른 브랜치에서 파생되서 나온 경우 다른 브랜치의 커밋을 다시 가져와서 Base를 재설정하는 것.
Rebase를 사용하면 다른 브랜치의 최신 커밋을 현재 브랜치의 최신 커밋 위에 적용하게 되어 히스토리가 선형적으로 나타나게 되고 불필요한 머지 커밋이 줄어들게 된다.

Fast-Forward는 브랜치 간의 병합을 할 때 커밋이 생기지 않고 merge 하려는 브랜치의 HEAD 커밋이 병합되는 브랜치의 HEAD 커밋으로 이동하는 방식이다. 단순하게 커밋 이동을 한다고 생각하면 된다.






Reference

🔗 https://velog.io/@suk13574/Git-3-way-merge-%EB%8D%94-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0 - [Git] 3-way merge 더 알아보기

🔗https://www.youtube.com/playlist?list=PLuHgQVnccGMA8iwZwrGyNXCGy2LAAsTXk - Git 유튜브 설명

🔗 https://seokzin.tistory.com/entry/Git-merge%EC%9D%98-%EC%A2%85%EB%A5%98-Fast-forward-3-way-merge - Merge 종류

profile
일상의 인연에 감사하라. 기적은 의외로 가까운 곳에 있을지도 모른다.

0개의 댓글