오늘의 영어 표현 21/30 · 단계: 리뷰 받기·답하기. 예문은 모두 이 글을 위해 지어낸 것입니다. 실제 저장소의 댓글을 옮긴 것이 아니며, 커밋 메시지는 예시입니다.
목차
한눈에 보기
| 표현 | Could you squash your commits? / Squashed into one commit. |
| 뜻 | 커밋들을 합쳐 주시겠어요? / 커밋 하나로 합쳤습니다. |
| 쓰는 자리 | 리뷰 마무리 단계의 요청과 답 |
| 공손함 | 중립. 절차에 관한 요청입니다 |
1. 뜻과 뉘앙스
squash 는 「눌러 찌그러뜨리다」라는 뜻이고, Git 에서는 여러 커밋을 하나로 합치는 것을 말합니다. git rebase -i 에서 squash 나 fixup 을 고르거나, git commit --fixup 과 git rebase --autosquash 를 함께 써서 합칩니다.
왜 합쳐 달라고 할까요? 리뷰를 거치면 「fix typo」, 「address review comments」, 「wip」 같은 커밋이 쌓입니다. 이런 커밋은 리뷰할 때는 유용하지만, 병합된 뒤에는 이력을 읽기 어렵게 만듭니다. KubeVirt 의 리뷰어 가이드는 커밋 하나하나가 의미가 있어야 한다고 하고, 「Fix reviewer comments」, 「wip」, 「addition」 같은 커밋은 합쳐 달라고 요청하라고 안내합니다.
언제 합칠지도 중요합니다. Kubernetes 기여 가이드는 리뷰 중에는 수정 사항을 새 커밋으로 올리고 아직 스쿼시하지 말라고 합니다. 리뷰어가 수정분만 따로 볼 수 있어야 하기 때문입니다. 스쿼시는 요청을 받았을 때, 보통 LGTM 을 받을 즈음에 합니다. 이 가이드는 수정 커밋은 합치고, 하나의 목표를 향하지만 서로 독립적인 변경은 합치지 않는다는 기준도 제시합니다. 또 Prow 를 쓰는 저장소에서는 tide/merge-method-squash 라벨을 달아 병합할 때 봇이 커밋을 합치게 할 수 있고, 이렇게 하면 손으로 합칠 때와 달리 lgtm 라벨이 사라지거나 CI 를 다시 돌릴 필요가 없다고 설명합니다.
스쿼시를 하면 커밋 해시가 바뀌므로 강제 푸시가 필요합니다. 12편에서 본 git push --force-with-lease 를 씁니다.
2. 예문
상황 1: 메인테이너의 요청
This looks good to merge. Could you squash the fixup commits into the main one before we merge?
상황 2: 작성자의 답
Done. Squashed into two commits: one for the API change and one for the generated files.
생성된 파일(generated files)을 별도 커밋으로 두는 것은 리뷰어가 사람이 쓴 변경만 보기 쉽게 하기 위한 흔한 관례입니다. 저장소 규칙을 따릅니다.
상황 3: 작성자가 먼저 물을 때
Should I squash the commits now, or would you prefer to keep them separate until the review is done?
리뷰어마다 선호가 다르므로 물어보는 것이 가장 안전합니다.
3. 비슷한 표현과 차이
- Squash and merge. GitHub 의 병합 방식 이름입니다. 메인테이너가 이 버튼으로 병합하면 작성자가 직접 합칠 필요가 없습니다.
- Could you clean up the commit history? 스쿼시뿐 아니라 커밋 메시지 정리, 순서 바꾸기까지 넓게 가리킵니다.
- Fixup commit. 앞선 커밋을 고치기 위한 작은 커밋입니다. 나중에 합칠 것을 전제로 합니다.
4. 한국인이 자주 하는 실수
- 리뷰 도중 수정할 때마다 스쿼시하고 강제 푸시하기. 리뷰어가 무엇이 바뀌었는지 찾기 어렵습니다.
- 고친 문장(PR 댓글): Pushed the fixes as separate commits for easier review. I'll squash them before merge.
- I merged my commits into one. merge 는 브랜치 병합을 떠올리게 해 헷갈립니다.
- 고친 문장: I squashed my commits into one.
- Squash is done. 주어와 동사가 어색합니다.
- 고친 문장: Done, squashed.
5. 한 줄 연습
작성자 입장에서 다음 내용을 댓글로 쓰십시오.
리뷰 수정 커밋들을 합쳐서 커밋 하나로 만들었습니다. 강제 푸시했습니다.
모범 답안
I've squashed the review fixes into a single commit and force-pushed.
force-push 는 동사로 쓸 때도 하이픈을 넣는 경우가 많습니다. 강제 푸시했다고 알려 주면 리뷰어가 화면이 바뀐 이유를 바로 압니다.
티티 한마디. 리뷰 중에는 커밋을 쌓고, 끝날 때 합칩니다. 순서를 지키면 리뷰어도 이력도 편합니다.
참고
- Kubernetes 기여 가이드, Pull Request Process(Squashing): https://github.com/kubernetes/community/blob/master/contributors/guide/pull-requests.md
- KubeVirt 리뷰어 가이드: https://github.com/kubevirt/kubevirt/blob/main/docs/reviewer-guide.md
- Git 문서, git-rebase(
--autosquash): https://git-scm.com/docs/git-rebase