Haribo ML, AI, MATH, Algorithm

github PT받기

2025-12-25
Haribo
 

전편 에서 전반적인 git의 원리 기능에대해 파봤으니까 이제 본격적인 협업을 위한 규칙과 좋은 commit 습관을 파헤쳐 본다.

1. Atomic Commit (원자적 커밋)

git 기능들을 보면 왔다갔다 뺐다 꼽았다, 수정/변경이 핵심인듯하다. 기존꺼 뭐 고치면서 추가로 필요할꺼같아서 다른것도 만지고 3~4 파일 한번에 커밋해버리고 이러면 사실 되돌아가고 빼오고 이러기 힘들어진다.
이론적으로 완벽한 단위는 분할 불가능한 최소한의 논리적 작업 단위 로 봐야한다.

이 커밋 하나만 떼어냈을 때, 논리적으로 말이 되며 빌드가 깨지지 않는가?

1.1 규칙 (Rules)

  1. Single Responsibility Principle (SRP): 하나의 커밋은 하나의 목적만 가져야 한다.
    • Bad: “버그 수정하고, 코드 정리하고, 주석 달았음” (3가지 섞임)
    • Good:
  2. fix: resolve null pointer exception in user auth
  3. style: remove trailing spaces
  4. docs: add comments for auth logic

  5. Pass The Build: 모든 커밋은 체크아웃했을 때 빌드가 성공하고 테스트가 통과해야함.
    • “작업 중(saving work)”이라며 컴파일 에러 나는 코드를 커밋하지 마라. 그건 git stash를 쓰거나 로컬에서만 두자.

1.2 Why? (Rationale & Counterfactual)

이유 1: git bisect (이진 탐색 디버깅)

  • 상황: 어제까진 잘 돌던 코드가 오늘 갑자기 뒤짐. 언제부터 죽었는지 모르는데 커밋은 100개가 쌓임ㅋ.
  • 해결: Git은 bisect라는 명령어를 제공하여, 100개의 커밋 중 문제가 발생한 최초의 커밋을 $O(\log N)$ 시간 복잡도로 찾아준다.
  • Counterfactual (안 지켰을 때): 빌드가 안 되는 “중간 저장용 커밋”을 잔뜩 섞어놨다면?
    • bisect가 돌다가 “빌드 실패”로 멈춤. 범인을 잡을 수 없게 되어 100개 커밋을 눈으로 다 뒤져야 함.

이유 2: git revert (롤백)

  • 상황: “로그인 기능 수정” 커밋에 치명적인 버그가 있어서 롤백하려고함.
  • Counterfactual (안 지켰을 때): 귀찮다고 “로그인 수정”과 “전체 코드 포맷팅(들여쓰기 정리)”을 한 커밋에 섞어버림.
  • 이 커밋을 revert 하면? 전체 코드 포맷팅까지 롤백되어 코드 스타일이 엉망이 되거나 충돌(Conflict)이 발생.

결국 롤백 못 하고 밤새 버그를 수정하거나 죽통 돌아감.
작업을 하다보면 “아 이것도 해야겠노, 아 저것도 해야하노” 하는 식으로 자꾸 딸린 식구들을 만들게 된다. 나도 모르게 관성적으로 이것저것 손대고 만지고 근데 commit 은 안했음.

앞으로는 무지성 작업을 하는게 아니고 오늘 뭐할지 정하고, 어떻게 구성할지 뭔 파일 만들고 뭔 함수 어떻게, 어디에 쑤셔박을지 생각하고 작업을 해야겠다.

  1. 작업 할 내용 큰 그림 구성 (ex. multi-process dataloader shuffle 제대로 되는지 확인, 안되면 고쳐야함)
  2. 파일 뭐뭐 만들지 구성, 파일명, 폴더명은 뭘로할지 어디에 박아놓고 가져다 쓸지
  3. Atomic 단위로 나눠서 하나씩 작업 후 commit 하기.
    • 이거하다 저거하다 절대 안됨. 왜냐면 Antigravity 커밋 메세지 딸깍을 못함.

2. Conventional Commits


Similar Posts

Comments