복잡한 머지 시나리오

고급 Git

Amanda Crawford-Adamo

Software and Data Engineer

항공 데이터 파이프라인 리포지토리

항공 여행 데이터 파이프라인 저장소의 디렉터리와 파일 그래프. Git 작업 디렉터리에 etl.py, load.py, transform.py, ingest.py 4개 파일. data 디렉터리에 flight_data.csv 데이터 폴더. 또한 .git 폴더 표시.

고급 Git

Git 스쿼시 머지

$$

기능

  • 대상 브랜치에 단일 새 커밋 생성
  • 소스 브랜치의 모든 변경을 결합
    • 부모 1개인 일반 커밋 추가(재귀 전략과 다름)
  • 대상 브랜치에 추가(기능 브랜치 아님)
    • 소스 브랜치의 상세 커밋 히스토리는 보존하지 않음

$$

장점

  • 히스토리가 깔끔하고 선형
  • 큰 기능의 코드 리뷰 단순화
  • 전체 기능을 되돌리기 쉬움
고급 Git

스쿼시 머지 예시

data-cleanup 브랜치는 두 번째 커밋 이후 main에서 분기. main에는 커밋 1개 추가. data-cleanup에는 커밋 2개 추가.

고급 Git

스쿼시 머지 과정

  1. main 브랜치 체크아웃

    $ git checkout main
    
  2. data-cleanup 변경을 스쿼시 커밋으로 만들기

    $ git merge --squash data-cleanup
    
  3. 스쿼시 커밋을 main 히스토리에 커밋

    $ git commit -m "Implement and optimize data cleanup"
    
고급 Git

스쿼시 머지 결과

두 브랜치(main, data-cleanup)를 보여주는 그래프. main에는 커밋 4개. feature 브랜치는 main의 최신 커밋 이후 분기되어 커밋 1개 추가. main의 최신 커밋은 data-cleanup의 추가 커밋들을 스쿼시한 단일 부모 커밋 객체.

고급 Git

Git 옥토퍼스 머지

$$

기능

  • 세 개 이상 브랜치를 한 번에 머지
  • 여러 부모를 가진 단일 머지 커밋 생성
  • 브랜치 간 충돌이 없을 때 적합

$$

장점

  • 여러 독립 기능을 동시에 통합할 때 유용
  • 프로젝트 버전별 여러 릴리스 브랜치 동기화에 사용
고급 Git

옥토퍼스 머지 예시

네 개의 개발 브랜치: main, ingestion, transform, load. ingestion/transform/load는 첫 커밋 후 main에서 분기되어 각 1개 커밋 추가. main도 1개 커밋 추가.

고급 Git

옥토퍼스 머지 명령어

Git 옥토퍼스 머지 명령어

git merge -s octopus

예시

$ git merge -s octopus ingest transform load
Trying simple merge with ingest
Trying simple merge with transform
Trying simple merge with load
Merge made by the 'octopus' strategy.
...
고급 Git

옥토퍼스 머지 결과

네 개의 개발 브랜치: main, ingestion, transform, load. ingestion/transform/load는 첫 커밋 후 main에서 분기되어 각 1개 커밋 추가. main에는 다섯 커밋이 있으며 다른 브랜치의 커밋 포함. 마지막 머지 커밋은 네 부모: main의 직전 커밋, ingest/transform/load의 최신 커밋.

고급 Git

요약

스쿼시 머지

  • 히스토리 단순화, 여러 커밋을 하나로 결합
  • 깔끔한 히스토리가 필요할 때 사용
    git merge --squash <source_branch>
    

옥토퍼스 머지

  • 브랜치 구조 보존
  • 여러 브랜치를 동시 머지
  • 병렬 개발을 효율적으로 통합
    git merge -s octopus <branch 1> <branch 2> <branch 3>
    
고급 Git

연습해 봅시다!

고급 Git

Preparing Video For Download...