본문 바로가기

카테고리 없음

[Git] 브랜치 다루기 고급 기능 : cherry-pick, rebase --onto, merge --squash

 

1. cherry-pick : 다른 브랜치의 단일 커밋 가져오기

 

다른 브랜치의 원하는 하나의 커밋만 가져올 때 사용합니다.

 

 

 

예를 들어 b브랜치의 b2 커밋 내용만 main 으로 가져오고 싶으면 

 

# b 브랜치의 커밋로그 확인후 b2의 커밋 해시 알기
git log b

# 메인브랜치에서 실행
git cherry-pick (b2 의 해시)

 

그럼 아래의 표처럼 main 의 a4 커밋 뒤에 b2를 가져올 수 있습니다

 

 

 

 

2. rebase --onto : 다른 가지의 잔가지 가져오기 ( 브랜치의 자식 브랜치 옮겨 심기)

 

 

신기능 개발로 b 브랜치를 작업하던 도중, 추가기능 c 브랜치를 개발하고 있는데

c 기능만 사용하는 걸로 바뀐 경우입니다.

 

 

git rebase --onto (도착 브랜치) (이동 대상 브랜치의 부모 브랜치) (이동 대상 브랜치)

#여기서의 예를 적용하자면
(main) git rebase --onto main b c

# c 브랜치로 head 가 이동됩니다
(c) git switch main

(main) git merge c

 

 

이후 c 브랜치를 삭제 하시거나 하면 됩니다.

 

 

 

 

 

 

3. merge --squash : 브랜치를 하나의 커밋메시지로 묶어 오기

git merge --squash (대상 브랜치)
  • 하나로 묶는 게 주 목적이므로 d1, d2, d3 의 코드를 main 에서 새로 개발하고 커밋하는 것과 동일한 순서가 됨
  • 실행 시, 변경사항들 스테이지 상태로 되어 있음
  • git commit 후 메시지 입력하여 하나로 묶어 줌

 

 

재 정리 하자면 아래의 차이점을 기준으로 사용하시면 됩니다.

 

일반 merge:
브랜치의 상세한 작업 히스토리가 중요할 때
각 커밋의 변경사항을 추적해야 할 때


merge --squash:
깔끔한 커밋 히스토리 관리가 필요할 때
피처 브랜치의 세부 커밋 히스토리가 중요하지 않을 때
여러 작은 커밋을 하나로 정리하고 싶을 때