#0 - 로컬저장소만들기
-로컬 저장소를 만드는 방법은 2가지가 있다.
-1. 버전관리를 원하는 디렉토리에서 git init을 하기
해당 명령어를 사용하면 해당 디렉토리에 .git이라는 하위 디렉토리가 생성된다.
-2. 원격레포지토리(깃허브)에서 clone해오기. git clone <url>
해당 방법은 어떤 프로젝트에 참여하거나 다른 git저장소를 복사해오고 싶을 때 사용한다.
명령어를 사용하면 원격저장소를 로컬컴퓨터의 디렉토리로 가져온 후, 해당 디렉토리에 .git이 생성된다.
#1- 저장하기
-작업중인 디렉토리의 파일들은 tracked 와 untracked로 나뉨. 전자는 관리대상으로 이미 스냅샷에 잇는 파일, 후자는 관리대상이 아님.
-관리대상(tracked)파일은 또한 modified 와 unmodified이거나 staged이다.
-modified된 파일을 스테이징을 하여 스테이지에어리어로 가며, 스테이지에서 커밋되어 로컬레포지토리에 저장된다. 즉, 로컬레포지토리에 가기 까지 2번의 과정을 거친다.
-이러한 파일들의 상태는 git status로 확인할 수 있다.
-git add 는 새로운 파일을 tracked되게 만들며, 새 파일이나 modified된 파일을 스테이지로 옮긴다. 그리고 커밋할 준비가 되어진다.
-add 전 관리하고 싶지 않은 파일이 있으면 gitignore파일을 만들어 추가하면 된다.
-git commit -m "내용" 으로 스테이지에 있는 파일을 커밋한다. 이때 staged되지 않은 파일을 커밋되지 않는다.
#2- 브랜치 나누기
-깃은 여러가지 버전(스냅샷)을 관리하는 툴이라고 했음. 그 여러가지 버전이 커밋과 브랜치.
-커밋하면 해당 커밋개체가 생성됨. 그리고 각각의 커밋개체는 커밋 포인터를 가지고 있어서 버전을 자유롭게 오갈 수 있음. 브랜치는 커밋브랜치를 가리크는 reference(참조, 포인터)이다. 사실 브랜치는 해당 분기의 마지막 커밋만을 가리키는 Ref임.
-git branch <브랜치명>으로 새로운 브랜치를 생성할 수 있음.

-이렇게 새로운 브랜치가 생기면 사용자는 현재 작업중인 브랜치가 무엇인지 파악할 수 있어야함. 이때 사용하는 것이 HEAD라는 특수포인터(간접 refernce). 간접Ref라고도 불리는 이유는 HEAD는 브랜치를 가리키고 브랜치는 해당 분기의 마지막 커밋을 가리키는 Ref이기 때문에, head -> branch -> commit 형태로 참조되고 있는 것임.

-위의 이미지와 같이 HEAD가 master브랜치를 가리키고 있으니, 현재 작업중인 브랜치는 master.

-HEAD를 옮기려면 git checkout <브랜치명> 명령어 혹인 git switch <브랜치명>를 사용한다. git checkout -b <브랜치명>은 브랜치를 생성함과 동시에 head를 옮긴다.

-해당 testing브랜치에서 커밋을 하면 아래와 같이 testing 브랜치에 새로운 커밋이 생성.
-여기서 다시 master브랜치로 돌아가 새로운 커밋을하면 아래와 같이 된다.

#3- 브랜치 합치기Merge


-위와 같이 브랜치를 나누었다고하고, hotfix와 master를 합치고자 한다.
-그렇다면 master브랜치로 체크아웃한 다음 git merge <합치고자하는 브랜치명>으로 브랜치를 합칠 수 있다.
-참고로 git merge -d <브랜치명>을 하면 합쳐지는 브랜치는 삭제된다.
-또한, 위와 같은 merge는 fast foward방식이라고 한다.


-위와 같은 merge는 3way-merge라고 한다.
-그리고 fast foward와 다르게 merge결과물로 새로운 커밋을 생성한다.
-그리고 쓸모없어진 브랜치는 git branch -d <브랜치명>으로 삭제할 수 있다.
-merge할 때 같은 부분을 수정했다면 충돌이 발생한다.
'개발툴 > 깃git' 카테고리의 다른 글
| Git 0-추가. branch, HEAD & detached head (0) | 2022.06.25 |
|---|---|
| Git2- config 와 remote (0) | 2022.06.24 |
| Git1 - fork, clone (0) | 2022.06.22 |