Quick Reference
Git은 파일을 자동 백업하는 기능보다, 어느 시점의 스냅샷을 어떤 의도로 남겼는지 기록하고 branch에서 안전하게 실험하게 하는 버전 관리 도구입니다. 보호 범위는 commit, ref, remote에 따라 달라집니다.
| 필요한 일 | Git 도구 | 아직 보호되지 않는 것 |
|---|---|---|
| 현재 수정 전후 비교 | git diff | 저장하지 않은 editor buffer |
| 의미 있는 상태 기록 | git add + git commit | commit하지 않은 worktree 변경 |
| 실험을 본선에서 분리 | git switch -c | branch에 없는 uncommitted 변경 |
| 다른 사람이 받게 공유 | git push | local-only commit과 local branch |
| 과거 변경 추적 | git log, git blame | commit message에 쓰지 않은 이유 |
git status
git switch -c feature/search-filter
# 변경하고 검토한 뒤
git add -p
git commit -m "Add search filter"
git push -u origin feature/search-filter파일 복사와 다른 점
Git commit은 파일 이름에 날짜를 붙여 복사하는 방식 대신, 특정 시점의 tree snapshot과 부모 commit·작성자·message를 연결합니다. 두 commit의 diff는 이 두 snapshot을 비교해 계산하므로 어떤 변경을 넣고 뺐는지 확인할 수 있습니다. branch는 commit을 가리키는 ref라서 별도 폴더를 복제하지 않고도 실험·review·merge 단위를 만들 수 있습니다.
좋은 commit은 모든 작업을 잘게 쪼개는 것이 아니라, revert·review·bisect할 수 있는 하나의 의도를 남깁니다. unrelated formatting과 behavior change가 섞였으면 git add -p로 stage를 나누거나, 먼저 작업을 정리한 뒤 commit합니다. 반대로 아직 실행·test도 하지 않은 중간 상태를 억지로 공유 commit으로 만들 필요는 없습니다.
local 기록과 remote 보관
clone에는 시작 시점에 fetch한 object와 ref가 들어가므로 remote가 일시적으로 없어도 local log·diff·commit은 가능합니다. 하지만 새 local commit과 branch는 git push하기 전까지 다른 clone에 없고, local disk 손상에도 자동으로 살아남지 않습니다. 중요한 기록을 협업·백업으로 남기려면 trusted remote 또는 별도 clone에 push해야 합니다.
Git은 untracked file, ignored secret, uncommitted 수정까지 항상 복구해 주지 않습니다. git status로 tracked/untracked를 확인하고, 큰 실험·파일 이동·clean/reset 전에는 commit, backup branch, 또는 별도 archive 중 필요한 보호 방법을 고릅니다.
협업에서 남기는 맥락
log, show, blame은 작성자에게 책임을 묻기보다 현재 코드가 어떤 문제를 해결하려 했는지 찾는 도구입니다. message에는 변경 대상만 나열하기보다 이유와 영향 범위를 적고, PR·issue·release note처럼 더 긴 맥락은 commit에서 연결합니다. protected branch, review, CI는 Git 자체의 local commit 모델 위에 팀이 추가하는 정책입니다.
git commit과 git push는 서로 다른 보호 단계입니다. commit하지 않은 변경은 Git history에 없고, push하지 않은 commit은 다른 저장소에 없을 수 있으므로 중요한 작업은 둘을 구분해 관리하세요.
참고 링크
2 sources