--- title: git — 분산 버전 관리 date: 2026-10-18 time: 12:00 model: admin category: programs author_type: human summary: 소스 코드 변경 이력을 저장·비교·되돌리는 분산 버전 관리 시스템. tags: 프로그램, 소스 관리, git --- **💬 "git 명령어"** git은 파일 내용의 변경 이력을 커밋이라는 단위로 저장해 두고, 언제든 이전 상태로 되돌리거나 여러 사람과 병합할 수 있게 해 주는 분산 버전 관리 시스템입니다. 서버 프로젝트든 개인 스크립트든 변경 이력을 남겨 두면 실수로 지운 코드도 되살릴 수 있고, 누구의 변경이 문제를 만들었는지도 빠르게 추적할 수 있습니다. - **저장 단위**: 커밋(commit) — 한 번에 저장되는 변경 묶음 - **작업 공간**: working tree(수정 중인 파일) → index(스테이징) → 로컬 저장소 - **원격 저장소**: GitHub·GitLab 등에서 공유하는 서버 저장소 - **기본 브랜치**: 보통 main — 안정된 최신 상태를 담는 줄기 ## 자주 쓰는 옵션 | 옵션 | 설명 | | --- | --- | | git status | 현재 변경 상태와 브랜치 확인 | | git log --oneline -n 10 | 최근 커밋 10줄 요약 보기 | | git add <파일> / git commit -m "메시지" | 변경 스테이징 후 커밋 | | git diff | 커밋되지 않은 변경 내용 나란히 비교 | | git branch / git switch | 브랜치 목록 보기 / 이동 | | git pull / git push | 원격 변경 가져오기 / 내 변경 보내기 | ## 필수 명령어 조합 3가지 - `git status && git diff` — 무엇이 바뀌었는지 확인한 뒤 커밋 - `git pull --rebase && git push` — 원격 최신 내용을 내 이력 위로 정리해 보내기 - `git log --oneline --graph -n 20` — 브랜치 간 합류 지점까지 한눈에 보기 **💬 "새벽 점검에서 쓰는 순서로 예시 만들어줘"** 실제 운영 중인 서버에서 자주 만나는 상황을 순서대로 정리했습니다. ### 저장소 준비 빈 폴더에서 시작하거나 기존 폴더를 등록합니다. ``` mkdir demo && cd demo && git init ``` ### 첫 커밋 읽을 파일을 하나 만들고 커밋합니다. ``` echo '# demo' > README.md git add README.md git commit -m "첫 커밋: README 추가" ``` ### 원격 연결 원격 저장소 주소를 연결한 뒤 첫 push를 보냅니다. ``` git remote add origin <저장소 URL> git push -u origin main ``` ## 실무에서는 이렇게 씁니다 ### 1. 실수로 지운 복원 **상황** — 로그 분석 스크립트를 수정하다가 내용을 통째로 망가뜨려 이전 상태로 되돌려야 하는 상황. ``` git log --oneline -n 5 git checkout HEAD~1 -- analyze.sh git status ``` **결과** — analyze.sh가 이전 커밋 시점의 내용으로 복원됩니다. **포인트** — 체크아웃 후 커밋하지 않으면 복원 내용도 이력에 남지 않으니 반드시 다시 커밋합니다. ### 2. 기능별 브랜치 분리 **상황** — 서버 배포용 안정 브랜치(main)를 건드리지 않고 새 기능만 만들고 싶은 상황. ``` git switch -c feature/nginx-ssl git commit -m "nginx ssl 설정 추가" git switch main ``` **결과** — feature/nginx-ssl 브랜치에서 작업이 분리되고 main은 그대로 유지됩니다. **포인트** — 배포 서버의 main은 항상 동작하는 상태로 두는 습관이 장애를 줄입니다. ### 3. 누가 언제 바꿨는지 추적 **상황** — 설정 파일 한 줄이 바뀌어 배포가 깨졌는데 언제·누가 바꿨는지 확인해야 하는 상황. ``` git log -L 10,20:deploy.yml --oneline git show <해당 커밋> ``` **결과** — 해당 줄을 건드린 커밋과 작성자·시각이 나옵니다. **포인트** — git blame 대신 -L로 범위를 좁히면 긴 설정 파일에서도 원인 커밋만 뽑아볼 수 있습니다. ## 주의할 점 - 커밋 메시지는 나중의 나를 위해 '무엇을 왜 바꿨는지'가 보이게 작성합니다. - 비밀번호·API 키가 담긴 파일은 .gitignore로 제외한 뒤 커밋합니다. - force push는 공유 브랜치에서 이력을 사라지게 할 수 있어 주의합니다. ## 실제 실행 화면 서버 저장소에서 git status와 diff --stat를 함께 실행한 가상 예시입니다(실제 실행 결과 아님). ![git 상태 확인과 변경 요약 출력 예시](https://games.cursorai.co.kr/assets/git-demo.png) 실제 운영 중인 서버 --- 원문(HTML): https://games.cursorai.co.kr/programs/dev/vcs/git.html