: develop → gov 브랜치 반영 과정에서 겪은 함정과 해결법
상황
develop 브랜치에서 조직도 기능을 개발했고, 이걸 gov 브랜치에 반영해야 했다. cherry-pick 하기 편하게 gov 기반으로 새 브랜치를 만들고 파일만 가져오기로 했다.
git checkout gov
git checkout -b feature/feat-org-page
git checkout develop -- src/public/pages/serviceUsersManagement.vue
간단해 보였다.
함정 1 — 기능과 무관한 변경이 딸려온다
git checkout branch -- file은 해당 파일의 브랜치 최신 상태 전체를 가져온다. 조직도 변경만 원했는데, develop에서 별도로 진행된 변경까지 모두 딸려왔다.
- import GlobalAlarm from "@/js/common/globalAlarm.js";
- import Menu from "@/components/common/menu.vue";
develop에서는 이미 GlobalAlarm과 Menu를 제거한 상태였다. 하지만 gov에서는 아직 사용 중이었고, 결과적으로 사이드바 메뉴가 통째로 사라졌다.
함정 2 — API 파일
memberRequest.js에도 같은 문제가 있었다.
추가해야 할 것
- requestOrganizations
- requestOrgMembers
- requestEgovLink
딸려오는 것
- requestLoginForPWA 삭제
- requestSetPassword 시그니처 변경
통째로 가져오면 gov에서 아직 쓰고 있는 함수가 사라진다.
해결 방법
1. 새 파일은 통째로 가져와도 된다
gov에 없던 파일은 충돌 가능성이 없다.
git checkout develop -- src/public/components/serviceUsersManagement/modal/ModalEgovLink.vue
git checkout develop -- src/public/components/serviceUsersManagement/CustomLoadingOverlay.ts
git checkout develop -- src/public/assets/css/orgChartMode.css
2. 기존 파일은 diff를 먼저 확인한다
git diff gov develop -- src/public/api/memberRequest.js
여기서 조직도와 무관한 변경을 식별하고, 해당 파일은 통째로 가져오지 않는다.
3. 혼합된 파일은 수동으로 필요한 부분만 추가한다
gov 버전을 유지한 채로 필요한 함수만 직접 붙여넣는다. memberRequest.js의 경우 조직도 API 3개 함수만 마지막에 추가했다.
체크리스트
| ✓ | git diff source target -- file로 전체 변경사항 확인 |
| ✓ | 새 파일인가? → 통째로 가져와도 OK |
| ✓ | 기존 파일인가? → 기능과 무관한 변경이 섞여있는지 확인 |
| ✓ | 삭제된 import/함수가 대상 브랜치에서 아직 사용 중인지 확인 |
| ✓ | 패키지 의존성(package.json)도 같이 옮겨야 하는지 확인 |
교훈
git checkout branch -- file은 "이 파일의 이 기능만 가져와"가 아니라 "이 파일의 모든 것을 가져와"다.
파일 단위 cherry-pick이라고 생각하면 안 되고, 파일 전체 덮어쓰기라고 생각해야 한다.
'개발자로 살아남기 > 트러블슈팅' 카테고리의 다른 글
| [AIoT] 게이트웨이가 뭐길래? Level vs Edge Triggered 알람 이슈 (1) | 2026.04.21 |
|---|---|
| [CSS] ag-grid autoHeight vs normal 모드에서 가로 스크롤 제어하기 (0) | 2026.04.06 |
| [JS] Cannot read properties of null (reading 'shapeFlag') - setTimeout과 디바운스 (0) | 2026.03.25 |
| [JS] Promise.reject()와 setTimeout (0) | 2026.03.25 |