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