깃이 없으면?
1. 변경 내역 확인이 어렵다
2. 작업을 되돌리기 어렵다
3. 협력하기 어렵다
변경사항(버전)을 조금 더 일목요연하게 관리해보자
버전 관리를 위한 도구, GIT
버전 = 유의미한 변화가 결과물로 나온 것
프로그램 개발 = 유의미한 변화를 쌓아 프로그램을 만들어나가는 것
버전 관리
1. 변경 내역들을 기억하며
2. 필요하다면 작업을 되돌리며
3. 여러 명의 코드를 쉽게 나누고 합치며 개발하는 것!
소스트리- 깃을 조금 더 쉽고 시각적으로 관리할 수 있는 도구
깃 허브-
원격 저장소 호스팅 서비스
원격(인터넷 상에서) 깃으로 관리한 프로젝트들을 호스팅(관리해주는) 서비스

저장소 - 깃으로 버젼을 관리할 수 있는 공간
작업 디렉터리(워킹 디렉터리)→ 버전 관리의 대상이 위치하는 공간(.git이 있는 디렉터리)
스테이지(깃이 관리하는 가상의 공간)→ 다음 버전이 될 후보가 올라가는 공간/인덱스
저장소(깃이 관리하는 가상의 공간)→ 버전이 만들어지고 관리되는 공간

작업 디렉토리에서 스테이지로 올리는 것을 add한다. 스테이지 한다.
스테이지에서 저장소로 올리는 것을 commit한다.
각각의 버전들을 지칭할 수 있는 정보, 부여된 고유의 정보를 커밋해시라고 한다.
태그는 특정 커밋을 조금 더 가독성 있게 지칭할 때 사용
만들어진 버전을 되돌리는 두 가지 방법





스테시- 내가 작업한 내용을 임시 저장한다.

브랜치는 버전의 분기
브랜치로 버전의 분기를 관리하는 방법
1. 브랜치를 나눈다
2. 각자의 브랜치에서 작업한다.
3. (필요하다면) 나눈 브랜치를 합친다.



HEAD와 체크아웃
HEAD
체크아웃(checkout)
브랜치를 합친다 = 브랜치를 병합(merge)한다
브랜치 내용이 업데이트되는 병합 기법을 빨리감기 병합(fast-forward merge)라고 한다.

충돌: 병합하려는 두 브랜치가 서로 같은 내용을 다르게 수정한 상황

어떤게 반영될지는 GIT도 모른다. GIT에서 충돌을 알려주면 본인이 C를 선택할지 B를 선택할지 결정해야 한다.
충돌 대처법
1. 충돌을 해결한다.(어떤 브랜치의 내용을 반영할지 직접 선별한다)
2. 다시 커밋한다.

브랜치의 재배치 (리베이스)