Git
- 버전 관리 시스템(Version Control System): 소프트웨어 개발에서 변경 이력을 체계적으로 저장해 "언제, 누가, 무엇을, 왜 바꾸었는가"를 추적하게 해주는 도구
- Git은 현재 가장 널리 쓰이는 버전 관리 시스템 중 하나
- 리눅스 소스 코드 관리를 위해 개발됨
- 여러 작업 흐름을 분리하거나 합칠 수 있음
- 이전 상태로 되돌릴 수 있음
- 어떤 변경이 문제를 일으켰는지 추적할 수 있음
- 여러 사람이 같은 프로젝트를 동시에 작업할 수 있음
- 실험적인 수정과 안정적인 코드를 분리할 수 있음
- 코드 변경의 맥락을 기록으로 남길 수 있음
에이전틱 코딩에서 버전 관리의 필요성
- AI는 여러 파일에서 코드를 빠르게 많이 바꿈
- 기존 기능을 깨뜨리거나 사람이 정확히 지시하지 않은 부분까지 바꿀 수 있음
- 여러 개의 기능을 동시에 개발하기 위해 흐름을 분리하고 나중에 합치는 기능이 필요
- 에이전트가 점점 오랜 시간 동안 작업하게 되면서 필요
git의 작동 원리

- 각 개발자는 로컬에 전체 이력을 가진 저장소(repo)를 둘 수 있음
- working directory: 실제 작업하는 디렉토리
- 변경 내역을 staging area에 임시 저장
- 커밋(commit)을 하면 staging된 내용이 저장소에 하나의 단위로 기록
- 커밋 메시지를 통해 변경 내용에 대한 설명을 추가할 수 있음
- 커밋을 로컬 저장소에서 원격 저장소로 보내거나(push), 가져올 수 있음
변경 확인
git status
- 현재 작업 공간의 상태를 보여줌
- 새로 생긴 파일(untracked)
- 수정되었지만 아직 staging하지 않은 파일
git add로 staging된 파일
- 현재 브랜치와 커밋 상태
git diff
- staging하지 않은 변경 내용을 이전과 비교
git diff --staged
- 다음 커밋에 들어갈 staging된 변경을 이전과 비교
git status
git diff
git diff --staged
변경 저장하기
git add
git add <파일명>
git add <폴더명>
git commit
git commit -m "<메시지>"
git commit --amend
git add
git add <파일명>
git add <폴더명>
git commit
git commit -m "<메시지>"
git commit --amend
변경 되돌리기
git restore <file>
- 아직 커밋하지 않은 파일 수정을 버리고 원상 복귀
git restore --staged <file>
git reset
- 최근 로컬 커밋을 되돌려서 커밋/스테이징 상태를 이전으로 이동
git reset --soft HEAD~1
git reset --hard HEAD~1
- 마지막 커밋을 취소하고 변경 내역도 원상 복귀
git restore <file>
git restore --staged <file>
git reset
git reset --soft HEAD~1
git reset --hard HEAD~1
.gitignore: 저장하지 않을 파일 정하기
.gitignore는 Git이 추적하지 않을 파일과 폴더를 지정하는 설정 파일
- 코드와 함께 저장하면 안 되는 파일을 실수로 커밋하는 것을 방지
- 비밀 정보:
.env, API key, 인증 파일
- 임시 파일: 로그, 캐시, 빌드 결과
- 대용량 파일: 데이터셋, 모델 파일, 다운로드 자료
- 개인 환경 파일: 가상환경, IDE 설정 일부
- 이미 Git이 추적 중인 파일은
.gitignore에 추가해도 자동으로 제외되지 않음
- 필요하면
git rm --cached <파일명>으로 추적만 해제
.env
__pycache__/
.venv/
node_modules/
*.log
git log와 git show: 변경 이력 읽기
git log는 지금까지 저장된 커밋 이력을 보여줌
- 누가, 언제, 어떤 메시지로 변경을 저장했는지 확인
- 특정 시점으로 돌아가거나 문제의 원인을 찾을 때 사용
git show는 특정 커밋의 상세 내용을 보여줌
git log
git log --oneline
git log --oneline --graph --all
git show <커밋해시>
git show HEAD
git show HEAD~1
브랜치: 기능 추가와 실험을 분리
- 브랜치는 Git에서 작업 흐름을 분리하는 방법
- 실제로는 커밋을 가리키는 가벼운 이동 가능한 포인터
- 브랜치가 필요한 이유
- 안정적인 코드와 실험 코드를 분리
- 여러 작업을 동시에 진행
- 완성된 변경만 나중에 합칠 수 있음
git switch 대신 git checkout도 가능
git branch <브랜치명>
git switch <브랜치명>
git switch -c <브랜치명>
Worktree: 여러 작업을 병렬로 돌리는 개발 환경
git worktree는 하나의 Git 저장소에서 여러 작업 폴더를 만들어, 서로 다른 브랜치를 동시에 열어둘 수 있게 해주는 기능
- 에이전틱 코딩에서 AI에게 여러 작업을 동시에 맡기고 싶을 때 사용
- 일반 브랜치만 쓰면 한 폴더에서 계속
git switch를 해야 함
- worktree를 쓰면 작업마다 별도 폴더가 생기므로 여러 Codex/Claude Code 세션을 각각 다른 폴더에서 동시에 실행 가능
git worktree add ../<워크트리명>
| 구분 | Branch | Worktree |
|---|
| 역할 | 작업 이력을 분리 | 작업 폴더를 분리 |
| 위치 | 같은 폴더 안에서 전환 | 서로 다른 폴더로 동시에 존재 |
| 사용 방식 | git switch로 이동 | 각 폴더에서 독립적으로 작업 |