AI 요약
대규모 기능을 개발할 때 코드 리뷰를 돕기 위해 기능별로 깔끔하게 쪼개진 '좋은 커밋'을 유지하는 것은 매우 번거롭고 피로한 작업입니다. 저자는 Jujutsu(jj) 버전 컨트롤 도구의 기존 기능인 jj absorb나 jj squash 역시 부적합한 커밋 할당이나 병합 충돌 등의 한계가 있어 'Git 정밀함 피로감(git rigour fatigue)'을 완전히 해결하지 못한다고 지적합니다. 이를 극복하기 위해 저자는 개발 중에는 편하게 코딩하고, 마지막에 정리하는 일명 '빨래 더미 정리(Big Pile Of Laundry)' 방식의 워크플로우를 고안했습니다. 이 방식은 빈 목푯값 커밋 흐름을 먼저 생성한 뒤 모든 변경사항을 하나로 통합하고, jj squash -i 명령어를 통해 변경 사항을 원하는 바구니에 차례로 분류해 담는 혁신적인 사후 커밋 정리 기법입니다.
핵심 인사이트
- Git 피로감 극복: 개발 중 '타입 정의 -> DB -> CRUD -> UI'와 같은 순서쌍을 엄격하게 유지하려다 생기는 피로감을 사후 정리 방식으로 완화합니다.
- 기존 도구의 한계 극복: 파일 최종 수정 위치 기준 분배 방식인
jj absorb나 충돌 가능성이 높은jj squash단독 사용의 단점을 상쇄합니다. - jj split 대비 우수성: 수정 사항을 누락했을 때 처음부터 다시 쪼개고 합쳐야 하는
jj split과 달리 순서에 영향 없이 변경 사항 조각(hunk)을 유연하게 정렬할 수 있습니다.
주요 디테일
- 빈 뼈대 생성: 작업 시작 전
jj new -B messy-first -m 'red'및jj new -A red -m 'blue'명령어를 사용하여 목푯값이 될 빈 커밋 히스토리를 미리 구조화합니다. - 커밋 통합: 작업이 끝난 뒤 흩어져 있는 지저분한 커밋들을
jj squash --from messy-first..messy-last --into messy-first명령어로 단 하나의 거대한 커밋으로 통합합니다. - 선택적 분배: 통합된 커밋에서
jj squash -i --from messy-first --into red명령어를 실행해 대화형(interactive) 인터페이스로 원하는 변경사항만 'red' 커밋으로 이전시킵니다. - 충돌 방지 보장: 최종 통합 커밋 상태에서 역으로 분배하므로, 중간 단계에서 발생할 수 있는 병합 충돌(merge conflict)을 원천적으로 예방합니다.
향후 전망
- Git의 복잡한 리베이스(rebase) 및 체리픽(cherry-pick) 워크플로우에 지친 고급 개발자들 사이에서 Jujutsu의 입지가 더욱 강화될 것으로 보입니다.
- 사후에 커밋을 유연하게 재배치하는 이 워크플로우가 대중화되면, 향후 Jujutsu 도구 자체에 이와 유사한 자동 분류 보조 명령어가 추가될 가능성이 있습니다.
