C.W.K.
Stream
Lesson 04 of 05 · published

Cherry-pick과 rerere

~22 min · cherry-pick, rerere

Level 0Untracked 새싹
0 XP0/47 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

Cherry-pick 은 빌리고, rerere 는 기억해

다른 branch 에서 commit 하나만 원하고 branch 전체 merge 는 안 하고 싶을 때. git cherry-pick <hash> 가 그 commit 이 도입한 변경을 가져다 현재 branch 위에 새 commit 으로 적용. 새 commit 은 source 와 다른 hash — 복사지 이동 아니야. 사용 사례: main 의 bug fix 를 release branch 로 backport, 폐기할 실험 branch 에서 유용한 commit 하나 끌어올리기, 장기 병렬 branch 사이로 fix 전파.

Cherry-pick 은 범위 가능 — git cherry-pick A..B 가 A 후부터 B 까지 모든 commit 을 순서대로 적용. Merge / rebase 처럼 conflict 가 동작 일시정지 — 해결, git add, git cherry-pick --continue. --abort 로 rewind. -x 는 메시지에 "(cherry picked from commit <hash>)" 추가 — branch 가로질러 cherry-pick 할 때 audit trail 이 source 가리키게 하는 데 무가치한 가치.

git rerere ("reuse recorded resolution") 은 장기 병렬 branch 있는 repo 의 무명 영웅. 활성화하면 해결한 모든 conflict 를 Git 이 기록. 다음에 같은 conflict 등장 — 같은 hunk, 양쪽 같은 내용 — 하면 Git 이 기록된 답으로 자동 해결. Main 과 주기적으로 merge 하는 maintenance branch 의 노동 절감 극적. git config --global rerere.enabled true 로 global 활성화 + 잊어, 절감이 조용히 쌓여.

조합이 maintenance 에서 빛나. main 에서 release branch 로 fix 10 개 backport 한다 치면. Rerere 없이는 main 이 그 후 refactor 한 줄 건드리는 모든 cherry-pick 이 새로운 수동 conflict. Rerere 켜면 각 패턴 한 번 해결, 같은 conflict 패턴 후속 cherry-pick 은 자동 해결. git rerere status 가 기록된 거 표시. git rerere clear 가 저장된 해결이 틀렸을 때 cache wipe.

Code

Cherry-pick 기본·bash
# 다른 branch 에서 commit 하나:
git cherry-pick abc1234

# 범위 (A 제외, B 포함):
git cherry-pick A_HASH..B_HASH

# 메시지에 출처 표시 포함:
git cherry-pick -x abc1234

# 자동 commit 건너뛰기 (stage 만):
git cherry-pick -n abc1234

# Conflict 해결 후 재개:
git add resolved-file
git cherry-pick --continue

# 빠지기:
git cherry-pick --abort
Rerere 활성화 + 관찰·bash
# Global (또는 repo 별) 활성화:
git config --global rerere.enabled true

# Conflict 후 해결 + commit. Git 이 조용히 해결 기록.

# 기록된 거 보기:
git rerere status
git rerere diff

# 미래 conflict 자동 해결 시 출력:
#   Resolved 'src/auth.js' using previous resolution.

# 기록된 해결이 틀렸으면 cache wipe:
git rerere clear

External links

Exercise

Branch 둘 세팅, mainrelease-1.0. main 에 작은 fix commit 하나. git switch release-1.0, git cherry-pick -x <fix-hash>. release-1.0 에 cherry-pick 된 commit 이 attribution 줄 가졌는지 확인. 별도로 rerere global 활성화, conflict 만들고 해결, 다른 branch 에 같은 conflict 일부러 재현. Rerere 가 두 번째 발생을 자동 해결하는지 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.