고급 브랜치 통합: Git 리베이스

고급 Git

Amanda Crawford-Adamo

Software and Data Engineer

Git 리베이스

  • 변경 사항 통합 방법
  • merge와 다름
  • 머지 커밋을 제거해 히스토리를 간결하게 함
  • 선형 커밋 그래프로 명확성 유지

Git Rebase 명령:

git rebase <branch_name>
고급 Git

리베이스 예시 - 전

데이터 정리 기능 브랜치와 main 브랜치 이미지. 기능 브랜치는 main의 두 번째 커밋 이후 분기됨. main에는 data-cleanup 분기 후 커밋이 두 개 더 있음.

고급 Git

리베이스 과정

  1. data-cleanup 기능 브랜치를 체크아웃합니다.
git checkout data-cleanup
  1. main 브랜치를 data-cleanup에 리베이스합니다.
git rebase main
  • data-cleanup 커밋이 main의 최신 커밋 뒤로 재생성됩니다
  • 리베이스된 data-cleanup 커밋은 새로운 해시를 갖습니다

참고: 충돌이 나면 수동으로 해결해야 합니다.

고급 Git

리베이스 예시 - 후

main 브랜치에 리베이스된 데이터 정리 브랜치 이미지. 이제 데이터 정리 브랜치는 main의 모든 커밋을 포함하고, 그 뒤에 데이터 정리 커밋이 시작됨. main 브랜치는 변하지 않음.

고급 Git

인터랙티브 리베이스

git rebase -i <commit_hash> 

기능

  • 여러 커밋을 세밀하게 수정 가능
  • 편집기가 열립니다

경고!

  • 공개 브랜치를 리베이스하면 워크플로가 깨질 수 있습니다
    • main 같은 공개 브랜치에 rebase를 사용하지 마십시오
  • rebase 사용 시점에 대한 팀 규칙을 정하십시오
고급 Git

인터랙티브 리베이스 - 전

$$

편집 전의 data-validation 브랜치 히스토리입니다.

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit
고급 Git

인터랙티브 리베이스 편집기

열린 편집기에서 pickfixup으로 커밋 히스토리를 수정합니다.

$ git rebase -i HEAD~3 
pick ghi9101 Add data validation function
fixup def5678 Fix validation bug
fixup abc1234 Optimize validation performance

# Rebase xyz1234..abc1234 onto HEAD~3(xyz1234) (3 commands)
#
# Commands:
# p, pick <commit> = use commit
# f, fixup <commit> = like "squash", but discard this commit's log message
...
고급 Git

인터랙티브 리베이스 - 후

Before

$ git log --oneline data-validation
abc1234 Optimize validation performance
def5678 Fix validation bug
ghi9101 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

After

$ git log --oneline data-validatoin
mno6789 Add data validation function
xyz1234 New Main Branch Commit
vwx7890 Main Branch Commit
jkl2345 Initial commit

다음 커밋들이 하나로 합쳐졌습니다

  • abc1234
  • def5678
  • ghi9101
고급 Git

머지 vs 리베이스

이미지는 세 개의 그래프(분기된 브랜치 그래프, 머지 결과 그래프, 리베이스 결과 그래프)를 보여줍니다

Merge

  • 전체 히스토리와 브랜치 구조 유지
  • 병렬 개발의 문맥 보존

Rebase

  • 대상 브랜치 위에 커밋을 재적용
  • 선형 히스토리 생성
  • 일부 문맥 정보 손실
고급 Git

머지와 리베이스 사용 시점

Merge

완료된 기능을 통합하고 개발 문맥을 보존할 때

Rebase

기능 브랜치를 main과 동기화하거나, 머지 전 정리할 때

기억하세요

  • Rebase는 히스토리를 재작성합니다. 신중히 사용하십시오
고급 Git

연습해 봅시다!

고급 Git

Preparing Video For Download...