Git이란?
- 리누즈 토발즈(Linus Torvalds)가 만든 분산 버전 관리 시스템(DVCS, Distributed Version Control Systems)으로, 소스코드를 효과적으로 관리하기 위해 개발됐다.
Git 저장소
1) 원격 저장소(Remote Repository)
- GitHub 등 외부 서버에 설정된 Git 저장소
- 기본 설정된 원격 저장소 주소에는 origin이라는 별명이 붙음
2) 로컬 저장소(Local Repository)
- 작업자의 개발 환경(PC)에 설정된 Git 저장소
작업 트리(Work Tree)
인덱스(Index)
- 커밋을 실행하기 전 저장소와 작업 트리 사이에 존재하는 공간
커밋(Commit)
- 파일 및 디렉토리에 대한 변경사항을 Git 인덱스에 기록(= stage)
- 커밋 후 저장소에는 각 커밋을 구분할 수 있는 영문/숫자로 이루어진 40자리 고유 이름이 생성
푸시(Push)
- 원격 저장소
- 로컬 저장소의 변경 이력을 원격 저장소에 업로드
풀(Pull)
- 원격 저장소의 변경 내용을 로컬 저장소에 적용(fetch + merge)
fetch
- 원격 저장소의 데이터를 로컬 저장소에 가져와서 내용만 확인(병합X)
브랜치(Branch)
- 독립적으로 어떤 작업을 진행하기 위한 개념
- 각 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있음
- 다른 브랜치와 Merge함으로써, 작업한 내용을 다시 새로운 하나의 브랜치로 모을 수 있음
- (통합 브랜치: master / 토픽 브랜치)
HEAD
- 현재 작업 중인 브랜치
- 특정 버전을 조회하기 위해서는 브랜치 이름이나 커밋 해시를 기억해야함
- '~(틸드, 물결기호)' → HEAD 뒤에 붙여 몇 세대 앞의 커밋을 가리킴
- '^(캐럿, 삽입기호)' → 브랜치 병합에서 원본이 여럿 있는 경우 몇 번째 원본인지 지정할 수 있음
stash
- 파일의 변경 내용을 일시적으로 기록해두는 영역
- 작업 트리와 인덱스 내에서 아직 커밋하지 않은 변경을 일시적으로 저장해 둘 수 있음
- stash에 저장된 변경 내용을 나중에 다시 불러와 원래의 브랜치나 다른 브랜치에 커밋할 수 있음
- (전환(checkout)된 브랜치에서 한 차례 변경이 있어 체크아웃에 실패할 경우 이용)
브랜치 통합
1) merge
- 여러 개의 브랜치를 하나로 모을 수 있음
- 변경 내용의 이력이 모두 그대로 남아 있기 때문에 이력이 복잡해짐
2) rebase
- 이력은 단순해지지만, 원래의 커밋 이력이 변경됨
- 정확한 이력을 남겨야 할 필요가 있을 경우에는 사용하면 안됨