정글에서 온 개발자
git cherry-pick 실무 적용 본문
배경
현재 시스템에 호환성이 없는 기능 업그레이드가 있어서 브랜치를 두개 파서 운영하고 있었다.
기존 버전이 1.0.1, 새 버전을 1.0.2로 설정했다. (시맨틱 버전을 공부하고 나니, 1.1.0 이 맞다는 걸 나중에 깨달았다.)
새 버전을 한창 개발하고 있는데, 기존 버전도 일부 기능을 업데이트 해달라는 요청이 지속적으로 와서 두 브랜치 사이에서 줄 바꿔 타기를 하는 날의 연속이였다.
파일 구조가 안 바꼈을 때는 개발한 feature branch를 양쪽에 다 merge해도 문제가 없었는데, 파일 구조가 크게 바뀌면서 커밋 중 일부만 적용하는 게 필요했다.
그래서 cherry-pick 과, 새 구조에 맞춰 새로 코드 작성하기를 혼용하고 있었다.
그러던 중, 새 버전에 구 버전 업데이트의 backend 부분만 cherry-pick이 되고 있었다는 걸 발견했다! (back 개발만 하느라 front 합쳐지는 건 신경 쓰지 못하고 있던 것!)
이를 해결하기 위해 cherry-pick을 정리하게 되어 기록을 남긴다.
문제상황
프론트에서 숫자가 음수로 잘못 나오는 버그를 수정한 커밋이 적용이 안 됐다.
해결
먼저 cherry-pick 하려는 commit hash를 복사한다.
vsc에서도 복사가 바로 가능하다
터미널에
git cherry-pick <commit-hash>
.를 입력한다.
바로 적용이 되는 걸 확인할 수 있다.
무지성 cherry-pick
이번 작업을 하면서, 적용해야 할 중간중간 적용한 커밋과 긴가민가한 커밋이 섞여있어서, 적용할 커밋을 선별하는 시간이 좀 걸렸는데, 안 그래도 된다. git이 알아서 노티를 준다.
시간순으로 cherry-pick을 적용한다는 전제 하에, 이미 적용한 커밋을 다시 cherry-pick 하면 아래와 같은 알림이 뜬다.
아무것도 변경이 없다는 말인데, cherry-pick --skip 이나 --abort를 하면 된다.
나는 단일 커밋을 일일히 cherry-pick을 해서 둘 중 아무거나 써도 되지만, 만약 여러 커밋을 cherry-pick 한다면 (cherry-pick A B C ) B에서 --skip을 할 경우 해당 커밋을 무시하고 넘어가고, --abort를 할 경우 cherry-pick 전체를 취소하게 된다. (A 까지 취소)
conflict
중간에 conflict가 나기도 하는데, 내용을 확인하고 해결 후 --continue 하거나 잘못 가져왔다면 --abort, --skip 하면 된다!