긴 단어를 입력하면 글자가 슬라이드 밖으로 넘치는 버그를 고쳤다. 한국어로는 "긴 입력 시 슬라이드 넘침 수정"쯤으로 쓸 커밋이다. 영어로 쓰려니 시제(tense)가 고민된다. 이미 고쳤으니 과거형(past simple) Fixed가 맞을 것 같고, 이 커밋이 고친다는 뜻이면 Fixes도 될 것 같다.
| 용어 | 뜻 |
|---|---|
| 동사 원형(base form) | 아무것도 붙지 않은 동사의 기본 꼴. 사전 표제어로 실린 꼴이다. 예: Can you fix the typo? |
| 과거형(past simple) | 지난 일을 말하는 동사 꼴. 규칙 동사는 동사 원형에 -ed를 붙인다. 예: I fixed the typo yesterday. |
| 3인칭 단수(third-person singular) | 나(I)도 너(you)도 아닌 하나(it, this commit). 현재형(present simple, 지금·늘 그렇다고 말하는 꼴)에서는 이 주어 뒤의 동사에 -s가 붙는다. 예: This commit fixes the typo. |
| 명령형(imperative) | 상대에게 무엇을 하라고 시키는 문장. 주어 없이 동사 원형으로 시작한다. 예: Run the tests before you push. |
Git 프로젝트의 관례에 가장 잘 맞는 커밋 제목은?
규칙: 동사 원형으로 시작한다
A. 제목은 동사 원형(base form)으로 시작한다. 주어(subject)도 시제도 없이 동사 원형부터 쓴다. 과거형(Fixed)이나 3인칭 단수(third-person singular) 현재형(present simple)인 Fixes가 아니다.
Fix race condition in token refreshAdd retry to the payment requestRemove deprecated sort option
B. 확인 문장에 넣어 본다. 맞게 썼는지 헷갈리면 제목을 "If applied, this commit will ___" 뒤에 붙여 읽어 본다(Chris Beams, How to Write a Git Commit Message). will remove deprecated sort option은 문장이 되고, will removed …나 will removes …는 되지 않는다.
C. 첫 글자는 대문자, 끝에는 마침표를 찍지 않는다. 제목은 문장이 아니라 머리글처럼 다룬다. 같은 글이 이 두 규칙도 권한다. 팀이 Conventional Commits(fix: …처럼 종류를 앞에 붙이는 관례)를 쓴다면 콜론 뒤 첫 글자의 대소문자는 팀 관례를 따르되, 명령형은 그대로 유지한다. Conventional Commits 명세는 동사 형태를 정하지 않지만, 예시는 fix: prevent racing of requests처럼 명령형이다(Conventional Commits 1.0.0).
Git도 스스로 커밋을 만들 때 명령형을 쓴다. git merge가 만드는 제목은 Merge branch '…', git revert가 만드는 제목은 Revert "…"다. 내가 쓴 제목이 이런 제목들 옆에 나란히 놓인다고 생각하면 형태를 맞추기 쉽다.
커밋 메시지 전체를 어떻게 나누고 무엇을 쓸지는 커밋 메시지와 원자적 커밋 노트에 있다. 이 유닛은 제목 첫 단어의 문법만 다룬다.
표현: 제목을 여는 동사
| 동사 | 언제 | 예 |
|---|---|---|
Add | 없던 것을 새로 넣을 때 | Add empty state to the order list |
Remove | 있던 것을 뺄 때 | Remove unused props from Modal |
Fix | 버그를 고칠 때. 무엇이 잘못됐는지 같이 쓴다 | Fix modal not closing on Escape |
Prevent | 생기면 안 되는 일을 막을 때 | Prevent double submit on the order form |
Handle | 빠져 있던 경우를 처리할 때 | Handle empty response from the search API |
Rename / Move / Extract | 동작은 그대로 두고 구조만 바꿀 때 | Extract date formatting into a util |
Replace | A를 B로 바꿀 때 | Replace moment with date-fns |
Bump | 의존성 버전을 올릴 때 | Bump vite from 7.0.0 to 7.0.1 |
Revert | 이전 커밋을 되돌릴 때 | Revert "Add retry to the payment request" |
Update와 Change는 쓰기 쉽지만 무엇을 어떻게 바꿨는지 말해 주지 않는다. Update button styles보다 Increase button padding on mobile이 히스토리에서 훨씬 잘 읽힌다. 더 구체적인 동사가 떠오르면 그쪽을 고른다.
Fix login bug, Add translation keys처럼 동사 원형으로 시작합니다.Login bug fix처럼 명사구(noun phrase)가 됩니다. 이미 고쳐 놓았다는 느낌을 살리면 Fixed가 됩니다. 둘 다 명령형 제목 사이에서 형태가 튑니다. '수정'을 Modify로 옮기면 무엇을 바꿨는지도 흐려집니다.함정 찾기: AI가 쓴 커밋 제목
오늘 한 작업 다섯 개를 영어 커밋 제목으로 써 줘.
- Git 관례에 맞게
의심스러운 줄을 모두 눌러 표시한 뒤 “검토 끝”을 누르세요. 함정은 2개입니다.
연습
1. "검색 API가 빈 응답을 줄 때 처리 추가"를 영어 커밋 제목으로 옮기면?
2. "If applied, this commit will ___" 뒤에 붙였을 때 문장이 되는 것은?
3. 날짜 포맷 함수를 유틸 파일로 옮기기만 하고 동작은 그대로다. 커밋 제목으로 가장 정보가 많은 것은?