로컬 코드 관리 : Git & 협업 관리 : Github
- 일반적인 버전 관리 : 파일 기반
- Git 버전 관리 : Diff 기반 = 직전 버전 대비 변경 사항
- Local Repository와 Remote Repository 차이
- Local Repository : 로컬 코드 관리 -> Git
- 다양한 버전 : 로컬에서 작업한 내용을 적용
- 히스토리 추적 : 이전 적용내용 확인
- 안전히 원격 저장 : 로컬 작업 내용들 모두 원격으로 백업
- Remote Repository : 협업 관리 -> Github
- 동료 개발자가 적용해놓은 최신 코드를 이어 받아 개발하기

Local Repository와 Remote Repository 사이
- Push : Local Repository -> Remote Repository
- Pull : Remote Repository -> Local Repository
- Conflict : Push 혹은 Pull시 '직전' 기준 충돌
2개의 Conflict 해결책
-
Rebase : 현재 내 작업물의 Base를 다시 설정한 뒤, 다시 커밋을 쌓는다
- 단점 : 내가 작업했던 커밋들이 다시 생성되기에, 히스토리가 리셋된다
-
Merge : 현재 내 작업물과 Remote에 업로드되어있는 상대 작업물 모두 존중하고, 머지 커밋을 만든다
- 단점 : 머지 커밋이 덕지덕지 생성되어서 머지 수가 많아짐에 따라 커밋이 좀 더러워진다

Git 구조

Remote Repository에서 최신 브랜치 가져오기
Pull = Fetch + Merge
- Fetch : FETCH_HEAD
- Merge
- fast-forward : Remote에 내 작업과 겹치는 어떠한 타인의 작업도 없을때, 그대로 이어 붙이기
- 3-way merging : Remote에 있는 타인의 작업 그대로, 내 작업 그대로 보존하고 머지 커밋 생성
- squash merging : Remote에 있는 타인의 작업 기준으로 다시 내가 작업하여 하나의 커밋으로 뭉쳐 생성
