version-control
Git.
Git의 작업 영역, 커밋, 브랜치, 병합과 기본 명령어
Git은 파일의 변경 이력을 스냅샷으로 기록하는 분산 버전 관리 시스템이다. 각 개발자가 전체 저장소 이력을 로컬에 가지고 있어 오프라인에서도 커밋과 브랜치 작업을 할 수 있다.
🔄 세 가지 영역
Git의 기본 작업 흐름은 세 영역 사이에서 변경을 이동하는 과정이다.
- Working Directory: 실제 파일을 수정하는 작업 공간이다.
- Staging Area(Index): 다음 커밋에 포함할 변경을 선별하는 공간이다.
- Repository: 커밋으로 확정된 스냅샷과 이력을 저장한다.
git status
git add src/app.ts
git commit -m "Add app entry"
git add는 단순히 새 파일을 등록하는 명령이 아니라 현재 변경 내용을 다음 커밋 후보로 올리는 명령이다.
📸 커밋
커밋은 특정 시점의 파일 상태와 메타데이터를 가리키는 스냅샷이다.
- 각 커밋은 이전 커밋을 부모로 참조한다.
- 작성자, 시각, 메시지, 트리 정보가 함께 기록된다.
- 커밋 ID는 내용에 기반한 해시로 식별한다.
- 한 커밋에는 하나의 논리적 변경만 담는 편이 검토와 되돌리기에 유리하다.
git log --oneline --graph
git show <commit>
git diff
git diff --staged
🌿 브랜치와 HEAD
브랜치는 특정 커밋을 가리키는 이동 가능한 포인터다. 새 커밋을 만들면 현재 브랜치의 포인터가 새 커밋으로 이동한다.
- HEAD: 현재 체크아웃한 브랜치나 커밋을 가리킨다.
git switch -c feature/login: 새 브랜치를 만들고 이동한다.git switch main: 기존 브랜치로 이동한다.git branch -d feature/login: 병합된 로컬 브랜치를 삭제한다.
브랜치를 사용하면 배포 가능한 기준 브랜치를 유지하면서 기능별 변경을 독립적으로 진행할 수 있다.
🔀 Merge와 Rebase
| 방식 | 동작 | 특징 |
|---|---|---|
| Merge | 두 브랜치의 공통 조상을 기준으로 이력을 합침 | 기존 이력을 그대로 보존한다. |
| Rebase | 현재 커밋을 다른 기준 커밋 위에 다시 적용 | 선형 이력을 만들 수 있다. |
# merge
git switch main
git merge feature/login
# rebase
git switch feature/login
git rebase main
이미 공유한 브랜치를 rebase하면 커밋 ID가 바뀌어 다른 사람의 이력과 충돌할 수 있다. rebase는 주로 아직 공유하지 않은 로컬 커밋을 정리할 때 사용한다.
⚠️ 충돌 해결
같은 파일의 같은 부분을 서로 다르게 수정하면 Git이 자동으로 합치지 못하고 충돌을 표시한다.
git status로 충돌 파일을 확인한다.- 파일의 충돌 마커를 보고 최종 내용을 결정한다.
- 테스트와 빌드로 결과를 검증한다.
git add로 해결한 파일을 표시한다.- merge 또는 rebase 절차를 계속한다.
충돌 해결은 어느 한쪽 변경을 기계적으로 선택하는 일이 아니라 두 변경의 의도를 함께 보존하는 과정이다.
🧯 변경 되돌리기
git restore <file>: 아직 스테이징하지 않은 파일 변경을 되돌린다.git restore --staged <file>: 스테이징만 취소하고 작업 파일은 유지한다.git revert <commit>: 기존 커밋을 취소하는 새 커밋을 만든다.git reset: 브랜치 포인터와 영역을 이동한다. 공유 이력에서는 주의해서 사용한다.
삭제 가능성이 있는 명령을 실행하기 전에는 git status, git diff, git log로 현재 상태를 먼저 확인한다.
💡 같이 알아둘 것
.gitignore는 아직 추적하지 않는 파일을 Git 대상에서 제외한다.- 비밀번호, API 키 같은 비밀값은 커밋하지 않는다. 이력에서 삭제해도 이미 노출됐을 수 있다.
origin은 원격 저장소의 관례적인 이름일 뿐 GitHub 자체를 뜻하지 않는다.- Git은 버전 관리 도구이고 GitHub는 Git 저장소를 호스팅하고 협업 기능을 제공하는 서비스다.
🔗 참고 자료
- Git Documentation — Git 공식 문서와 매뉴얼 진입점이다.
- Pro Git Book — Git 개념과 워크플로를 다루는 공식 도서다.
- Git Reference — 명령별 레퍼런스 매뉴얼이다.
