git commit

Record changes to the repository

Git 공식 매뉴얼(man git-commit)

미래의 나에게 아무 설명서도 없이 수수께끼 폭탄을 던지는 행위이자 가끔은 유서 작성이기도 하다. 커밋 메시지: 'asdf' (실제로 보낸 메세지임)

1. 개요

준비 영역(Staging Area)에 모인 모든 파일의 변경 스냅샷을 영구히 기록하는 명령어다. 단순히 코드를 저장하는 행위를 넘어, '왜 이 코드를 고쳤는지'에 대한 의도와 철학을 담아 역사적 이정표를 세우는 매우 핵심적인 단계다. 고유한 SHA-1 해시 코드가 부여되어 영구히 보존된다.

2. 커밋 메시지: 개발자 지성의 척도

실제 개발 바닥에서 그 개발자의 인성과 역량을 가장 쉽게 가늠할 수 있는 잣대가 바로 커밋 메시지다. 좋은 커밋 메시지는 첫 줄만 봐도 버그의 원인과 해결책이 한눈에 파악되지만, 빌런들의 메시지는 대개 성의 없는 update, fix bug, 진짜최종수정, 퇴근하자 따위의 성의 없는 단어로 도배되어 있다. 이는 훗날 거대한 버그 추적이나 역사 복구 단계에서 전 사원이 단체로 머리싸싸매고 눈물 흘리는 대참사를 야기한다.1

3. 과거 세탁의 명수: git commit --amend

방금 야심 차게 커밋을 때렸는데 오타를 발견했거나, 빌드에 치명적인 세미콜론 누락을 깨달았다면 당황하지 않고 --amend 마법을 부릴 수 있다. 이 옵션은 방금 전에 올린 따끈따끈한 가장 최신의 커밋을 열어 변경 사항을 슬쩍 끼워 넣고, 심지어 커밋 메시지까지 세련되게 수정할 수 있게 해준다. 마치 처음부터 완벽하게 짠 천재 개발자인 것처럼 역사를 조작할 수 있어 실무에서 아주 유용하게 쓰인다.

4. 실제 사용 예시

스테이징된 변경 사항을 하나의 기록으로 남기는 기본 형태다. 메시지는 나중에 로그만 봐도 의도가 보이도록 쓰는 편이 좋다.

git add src/login.ts
git commit -m "Add login validation"

방금 만든 커밋에 빠진 파일을 추가하거나 메시지를 고치고 싶을 때는 --amend를 사용한다. 이미 공유한 커밋에는 조심해서 써야 한다.

git add src/login.test.ts
git commit --amend

# 메시지만 바로 수정
git commit --amend -m "Add login validation and tests"

5. 관련 밈 및 드립

5.1. 커밋 메시지 진화 단계 밈

출근 직후에는 [FEAT] Implement login auth service using OAuth2처럼 현란하고 화려한 영문 문법으로 정성껏 작성되다가, 오후 5시가 넘어가면 [FIX] auth check bug, 야근에 찌든 새벽 2시쯤에는 fix, 제발, asdfasdf, 집에가고싶다 순으로 언어 능력이 퇴화하는 실제 개발자들의 뇌 상태 변화를 풍자한 눈물겨운 밈이다.

5.2. git commit -m "bug fix" (근데 버그 늘어남)

분명 버그 하나를 수정했다고 자신만만하게 커밋을 찍어 배포했지만, 연쇄 작용으로 인해 신규 버그 5개가 새로 부화하여 사방으로 기어다니는 상황을 비꼬는 드립이다. 이 경우 다시 fix the fix 커밋이 연쇄적으로 늘어나며 로그는 아수라장이 된다.

6. 여담

  • SHA-1 해시: 각 커밋은 고유한 40자리 체크섬 값을 가지며, 앞의 7자리만 입력해도 중복되지 않는 한 해당 커밋을 정확히 타겟팅할 수 있다.
  • 기본 에디터 지옥: -m 옵션 없이 그냥 git commit만 치면, 악명 높은 Vim 에디터가 불쑥 튀어나와 나가지를 못해 컴퓨터를 강제 종료하는 뉴비들이 허다하다.
  • 커밋: --allow-empty 옵션을 주면 내용물이 하나도 없어도 무조건 커밋을 찍어낼 수 있다. 가끔 Jenkins나 GitHub Actions의 자동 빌드 트리거를 테스트하기 위해 무의미한 빈 커밋을 올리곤 한다.

7. 관련 문서

각주

  1. 실제로 협업 환경에서 커밋 메시지를 개판으로 작성하는 사람과는 같이 밥도 먹지 말라는 격언이 전해져 내려온다.