잔디는 무엇을 세는가 — GitHub 컨트리뷰션 그래프의 실제 규칙
커밋했는데 잔디가 안 채워지는 경우의 원인은 대부분 정해져 있다. 집계 조건을 정리한다.
커밋했는데 안 채워지는 이유
컨트리뷰션 그래프는 모든 커밋을 세지 않는다. 집계 조건이 명확히 있고, 대부분의 "왜 안 채워지지" 상황은 그중 하나에 걸린다.
조건 1 — 커밋 이메일이 계정에 등록돼 있어야 한다
가장 흔한 원인이다. 커밋에 기록되는 author 이메일이 GitHub 계정에 등록된 이메일과 일치해야 집계된다.
확인:
```bash
git config user.email
git log -1 --format='%ae'
```
이 값이 계정 설정의 이메일 목록에 없으면 그 커밋은 누구의 것도 아닌 상태가 된다. 특히 여러 계정을 쓰는 경우 저장소마다 이메일이 어긋나기 쉽다.
실이메일 노출을 피하려면 GitHub이 제공하는 noreply 이메일(숫자+아이디@users.noreply.github.com)을 쓰면 된다. 이 주소도 정상 집계된다.
조건 2 — 기본 브랜치 또는 gh-pages
기능 브랜치에만 있고 병합되지 않은 커밋은 집계되지 않는다. PR이 병합되면 그 시점에 반영된다.
병합 방식에 따라 결과가 달라진다.
| 방식 | 결과 |
|---|---|
| Merge commit | 원래 커밋들이 그대로 들어감 |
| Squash merge | 하나의 새 커밋으로 합쳐짐. author는 유지 |
| Rebase merge | 커밋이 다시 쓰이며 committer가 바뀔 수 있음 |
조건 3 — 포크가 아닌 저장소
포크한 저장소에 직접 한 커밋은 집계되지 않는다. 원본에 PR을 보내 병합돼야 반영된다.
포크에서 오래 작업하는 경우 그래프가 비어 보이는 이유가 이것이다.
조건 4 — 저장소 접근 권한
비공개 저장소의 커밋은 기본적으로 그래프에 개수만 반영되고 내용은 비공개다. 설정에서 비공개 기여 표시를 켜면 잔디에 포함된다.
조직 저장소는 그 조직의 멤버여야 하는 등 추가 조건이 붙을 수 있다.
잔디를 채우는 것이 목표가 되면
컨트리뷰션 그래프는 활동의 부산물이지 성과 지표가 아니다. 매일 채우는 것을 목표로 삼으면 몇 가지 문제가 생긴다.
- 의미 없는 커밋(공백 수정, 파일 하나 추가)으로 채우기
- 하나의 논리 단위를 쪼개서 여러 날에 나눠 커밋
- 실제 학습·기여보다 그래프 유지에 시간 배분
채용 과정에서 그래프를 보는 경우에도, 대개 연속성보다 커밋 내용과 저장소의 성격을 본다. 빈 날이 있는 것 자체가 문제되는 경우는 드물다.
실질적으로 확인할 것
그래프 대신 볼 만한 것들:
- 최근 6개월 동안 완결한 저장소가 있는가 (README·실행 가능 상태)
- 남의 저장소에 보낸 PR이 있는가
- 커밋 메시지가 무엇을 왜 바꿨는지 설명하는가
- 이슈나 리뷰에서의 소통 흔적
이 항목들은 그래프와 달리 매일 채울 수 없고, 그래서 더 많은 것을 보여준다.
최종 수정 2026-08-28