Git의 개요
버전 관리 시스템
버전 관리 시스템이란? 파일의 변화를 기록해서 특정 지점을 불러올 수 있는 시스템을 말한다.
- Git은 분산형 버전 관리 시스템 (Distributed Version Control System)
- Git은 스냅샷을 이용해서 버전 관리함.
로컬 | 중앙집중형 | 분산형 |
내 컴퓨터에서만 버전 관리 | 서버에서만 버전 관리 | 내컴퓨터 + 서버에서 버전관리 |
Git의 작업흐름
Modified → Staged → Committed
Modified : 수정한 파일을 아직 데이터베이스에 커밋하지 않은 상태, 수정만 일어난 상태
Staged : 현재 수정한 파일을 곧 커밋할 것이라고 표시한 상태.
Committed : 데이터가 로컬데이터베이스에 안전하게 저장됐다는것을 의미한다. 버전 관리를 한 상태
Git의 명령어들
작업 체크아웃 / 생성
- git checkout : 특정버전으로 이동하는 것. ( -b : 브랜치를 만들고 체크아웃)
git checkout <main> → git checkout -b <브랜치명>
- git commit : 커밋 생성 / 즉 버전 업데이트를 말한다.
git commit -m <커밋 주석>
- git branch : 브랜치 생성 / 특정 커밋에 대한 참조
> -f : 브랜치를 강제로 옮기는 것
> -u : 원격 추적 설정기능
> 상대 참조(Relative Reference)
- HEAD : 현재 작업 중인 버전
- ^ : 특정 커밋의 부모
- 2 : 두 번재 부모
- ~ : 특정 커밋으로부터 어떤 수만큼 떨어진 부모
- git tag : 특정 커밋에다가 어떤 내용을 남기는 것
작업 병합 / 복사
- git merge : 서로 다른 두 개의 커밋을 합쳐서 새로운 커밋을 생성1
git merge <대상이 되는 브랜치>(병합 / 새 커밋 생성) →
git checkout <체크아웃 할 브랜치> → git merge <병합 할 브랜치> (브랜치 정리 / 최신커밋은 모든 브랜치가 공유)
- git rebase : HEAD ~ 분기점까지의 상위커밋들을 복사해 다른 커밋으로 붙여넣는 것 ( -i : 인터랙티브 리베이스)
git checkout <체크아웃 할 브랜치> → git rebase <병합 할 브랜치>
- git cherry-pick : HEAD가 있는 커밋에다 일련의 커밋들을 복사한다.
git checkout <체크아웃 할 브랜치> → git cherry-pick <Commit1> <Commit2> <...>
작업 되돌리기
- git reset : 이전으로 되돌아가는 것
git checkout <체크아웃 할 브랜치> → git reset HEAD~1(바로 전 단계로 리셋)
- git revert : 특정 커밋의 정반대의 새로운 커밋을 만드는 것
git revert <체크아웃 할 브랜치> → git reset HEAD(바로 전 단계로 리셋)
reset | revert |
시간을 아예 과거의 특정 커밋으로 되돌린다. (만약 최근 자료들을 팀원들과 공유하고 있으면 reset으로 되돌리기 방식은 상당히 위험할 수 있다.) |
과거의 특정 커밋을 없던걸로 처리한다. (과거로 돌아가겠다는 이력을 남김) |
원격 작업
- git fetch : 원격 저장소의 내용을 로컬로 가져오는 것 ( 서버 → 로컬 )
> 1. 로컬에 없는 커밋을 다운로드
> 2. 원격 브랜치를 업데이트
> 원격 브랜치 : 원격 저장소의 브랜치를 추적
- git pull : git fetch + git merge
- git push : 로컬 저장소의 내용을 원격으로 보내는 것 (로컬 → 서버)
> 1. 원격에 없는 커밋을 업로드
> 2. 원격 브랜치를 업데이트
레파지토리 생성, 초기작업
- git clone : 원격 저장소를 복제하는 것 ( 서버 → 로컬 )
> git clone [레파지토리 주소]
- git config : 최초 설정 (각 레파지토리마다 다르게 설정하고 싶으면 --global 대신 --local을 적으면 된다.)
> git config --global user.name "[사용자 이름]"
> git config --global user.email "[이메일]"
- git remote : 서버를 지정해주는 행위
> git remote add orgin [레파지토리 주소]