GitGitHub잔디생산성

GitHub 잔디가 비었을 때, 백데이트 커밋으로 채우는 법 (정직하게)

July 1, 20261 min read

잔디 한두 칸이 비면 왜 그렇게 신경 쓰일까

GitHub 프로필의 contribution graph, 흔히 "잔디"라고 부르는 그 초록 칸들. 꾸준히 커밋하다 보면 어느 날 중간에 하얗게 빈 칸 두어 개가 보일 때가 있다. 나도 블로그(backtodev) 작업을 하다가 6월 28·29일이 텅 빈 걸 발견했다.

분명 그 이틀에도 작업을 했는데 왜 비었을까? 확인해 보니 그날 저장소에 일어난 건 GitHub Actions 봇이 만든 자동 커밋뿐이었다. 봇 커밋은 내 잔디에 안 잡힌다. 실제로 한 작업(블로그 초안 작성)은 git 커밋으로 안 남아 있었던 거다.

그래서 "이미 한 작업을 그 날짜로 기록하는" 방법을 찾아봤다. 결론부터 말하면 git은 커밋 날짜를 마음대로 지정할 수 있다. 다만 이걸 어떻게 쓰느냐에 따라 "정직한 기록"이 될 수도, "잔디 조작"이 될 수도 있다. 그 경계까지 같이 정리한다.

먼저: 잔디는 어떻게 계산될까

채우는 법을 알기 전에, 왜 비는지부터 알아야 한다. GitHub가 어떤 커밋을 "내 기여"로 세는지는 조건이 명확하다.

조건설명
커밋 이메일커밋의 author 이메일이 내 GitHub 계정에 등록된 이메일이어야 함
브랜치기본 브랜치(main 등) 또는 gh-pages
저장소내가 권한을 가진 저장소, fork가 아님
날짜너무 먼 과거나 미래가 아닐 것

빈 칸의 원인은 대부분 이 중 하나가 어긋난 경우다. 내 경우는 "봇이 커밋했고, 내 이메일이 아니라서" 안 잡힌 케이스였다.

💡 자주 하는 실수: 회사 노트북과 개인 노트북의 git config user.email이 다른 경우. 한쪽 이메일이 GitHub에 등록 안 돼 있으면 그 기기에서 한 커밋은 잔디에 안 뜬다. git config user.email로 먼저 확인하자.

Step 1. 내 커밋 이메일부터 확인

백데이트를 하든 안 하든, 이메일이 안 맞으면 헛수고다. 먼저 확인한다.

git config user.email

여기 나온 이메일이 GitHub 계정(Settings → Emails)에 등록돼 있어야 한다. 안 맞으면 바로잡는다.

git config user.email "you@example.com"

Step 2. 과거 날짜로 커밋 만들기

git에는 날짜가 두 종류 있다. 이게 핵심이다.

  • Author date: 코드를 "작성한" 날짜
  • Committer date: 커밋이 "기록된" 날짜

잔디는 이 둘을 함께 본다. 그래서 둘 다 지정해야 원하는 날짜에 찍힌다. 환경변수로 넘긴다.

GIT_AUTHOR_DATE="2026-06-28T14:20:00" \
GIT_COMMITTER_DATE="2026-06-28T14:20:00" \
git commit -m "post: 예약 포스트 등록"

GIT_COMMITTER_DATE를 빼먹으면 오늘 날짜로 찍혀서 잔디가 엉뚱한 칸에 들어간다. 둘을 같은 값으로 맞추는 게 포인트다.

푸시하면 끝이다.

git push origin main

잠깐 기다리면(보통 몇 분) 프로필 잔디에 그 날짜 칸이 초록으로 바뀐다.

Step 3. 내가 실제로 한 방법 — 진짜 작업을 그 날짜로

여기서부터가 이 글에서 제일 하고 싶은 이야기다. 나는 빈 칸을 채우려고 의미 없는 빈 커밋을 만들지 않았다. 대신 28·29일에 실제로 한 작업을 그 날짜로 나눠 기록했다.

그 이틀에 한 일은 블로그 초안 19개를 예약 발행 폴더로 등록하는 작업이었다. 그래서 이걸 두 묶음으로 나눠, 각각 28일·29일자로 커밋했다.

# 28일: 첫 묶음 등록
git add content/scheduled/post-a.md content/scheduled/post-b.md ...
GIT_AUTHOR_DATE="2026-06-28T14:20:00" \
GIT_COMMITTER_DATE="2026-06-28T14:20:00" \
git commit -m "post: 예약 포스트 10개 등록"

# 29일: 둘째 묶음 등록
git add content/scheduled/post-k.md ...
GIT_AUTHOR_DATE="2026-06-29T15:40:00" \
GIT_COMMITTER_DATE="2026-06-29T15:40:00" \
git commit -m "post: 예약 포스트 9개 등록"

결과적으로 잔디는 채워졌지만, 그건 없는 활동을 지어낸 게 아니라 실제 한 작업을 뒤늦게 git에 기록한 것이다. 이 차이가 중요하다.

빈 커밋으로 채우는 법 (참고만)

물론 기술적으로는 아무 내용 없는 빈 커밋으로도 칸을 채울 수 있다.

GIT_AUTHOR_DATE="2026-06-28T12:00:00" \
GIT_COMMITTER_DATE="2026-06-28T12:00:00" \
git commit --allow-empty -m "chore: keep streak"

--allow-empty는 변경 사항이 없어도 커밋을 만들게 해준다. 하지만 이건 추천하지 않는다. 저장소 히스토리에 의미 없는 커밋이 쌓이고, 무엇보다 잔디 본래의 의미(실제 활동 기록)를 스스로 무너뜨리는 일이다.

한 발 물러서서: 굳이 채워야 할까

솔직히 말하면, 잔디 한두 칸 비는 건 전혀 문제가 아니다. 매일 빈틈없이 초록인 프로필이 오히려 부자연스럽기도 하다. 채용 담당자도 잔디 색칠 빈도보다 "무엇을 만들었는지"를 본다.

그래서 내 기준은 이렇게 정리됐다.

상황판단
그날 실제로 한 작업이 git에 안 남았다백데이트로 기록하는 건 합리적
그날 아무 작업도 안 했다빈 커밋으로 채우는 건 자기기만
그냥 streak 숫자가 아까울 뿐안 채우는 게 낫다

기술은 같지만, 동기가 "기록"이냐 "조작"이냐가 갈림길이다.

트러블슈팅

증상원인해결
백데이트했는데 잔디에 안 뜸커밋 이메일이 GitHub 미등록git config user.email → GitHub Emails에 등록
오늘 날짜로 찍힘GIT_COMMITTER_DATE 누락author/committer 둘 다 지정
fork 저장소라 안 잡힘fork의 커밋은 기여로 안 셈원본 저장소나 내 저장소에서 커밋
봇/Actions 커밋이 잔디에 없음author가 내 이메일이 아님정상 동작. 봇 커밋은 원래 안 잡힘
며칠 지나도 반영 안 됨반영 지연 또는 이메일 불일치프로필에서 해당 커밋의 author 확인

정리

  • 잔디 인정 조건: 내 이메일 + 기본 브랜치 + fork 아님
  • 과거 날짜 커밋: GIT_AUTHOR_DATEGIT_COMMITTER_DATE둘 다 지정
  • GitHub Actions 봇 커밋은 내 잔디에 안 잡힌다 (author가 내가 아니므로)
  • 빈 커밋(--allow-empty)으로도 채울 순 있지만 권장하지 않음
  • 가장 좋은 건 실제로 한 작업을 그 날짜로 기록하는 것

나는 잔디를 "꾸미는" 도구가 아니라 "정확히 기록하는" 도구로 쓰기로 했다. 빈 칸을 보고 조급해하기보다, 그날 한 일이 git에 제대로 남았는지를 챙기는 편이 결국 더 떳떳하다.

PM

backtodev

40대 PM, 다시 개발자로 돌아갑니다. 실패하고 배우며 성장하는 기록.

GitHub 잔디가 비었을 때, 백데이트 커밋으로 채우는 법 (정직하게) | backtodev