깃(Git)은 소스코드를 효과적으로 관리하기 위해 개발된 버전 관리 시스템(Version Control System) 이다ㅏ.
개발자들은 깃을 통해서 소스코드의 변경 이력들을 확인할 수가 있다.
우리가 흔히 알고 있는 깃허브(Github)와 혼동하는 경우가 많은데, 둘이 밀접한 관계를 맺고 있는 것은 맞으나 github가 git의 일부는 아니다.
이를 이해하기 위해서 우선 git의 구조에 대해서 제대로 이해할 필요가 있다.
git을 사용할 때는 Working Directory(작업영역), Staging Area, Repository(저장소) 이 3가지 영역을 알고 있어야 한다.
Working Directory는 말 그대로 우리가 현재 로컬에서 작업하고 있는 디렉토리를 말한다.
Staging Area(Index)는 저장소로 작업한 내용을 커밋하기 전에 임시로 올려두는 공간이라고 생각하면 된다.
Repository는 파일이나 폴더를 변경 이력별로 저장해두는 곳이라라고 생각하면 된다.
Working Directory에서 작업(modify) -> Staging Area로 add -> Repository로 commit 순으로 작업이 이루어진다.
나같은 경우는 처음 공부할 때 Working Directory와 Repository가 구분이 되지를 않았다. Repository는 보이지 않는 영역이기 때문에 처음 공부하는 사람들이 헷갈리기 쉽다.
예를 들어 내가 현재 작업하고 있는 프로젝트에 대한 변경 이력을 저장하고 싶다면 이 프로젝트의 디렉토리를 git init 해준다.
git init을 하게 되면 그 디렉토리는 저장소(Repository)로 지정이 된다. 저장소로 지정이 되면 그 디렉토리는 Working Directory이자 Repository가 되는 것이다. Repository로 지정된 디렉토리에는 .git이 생성되는데 바로 여기에 해당 디렉토리의 변경 이력이 저장된다.
Branch
저장소를 처음 만들면 git은 바로 'master'라는 이름의 브랜치(branch)를 만들어 둔다. 이 저장소에서 수행된 뒤, 커밋되는 작업들은 모두 'master'브랜치에서 일어나는 것이 된다.
작업의 흐름을 나뭇가지처럼 나눠서 관리하기 위해 branch를 만들어 줄 수 있다.
git branch : 현재 브랜치 및 생성된 브랜치들을 볼 수 있음
git branch <브랜치 이름> : 새로운 브랜치 생성
git checkout <브랜치 이름> : 해당 브랜치로 이동
현재 작업중인 local branch는 HEAD라는 이름의 포인터가 가리킨다. (처음 저장소를 만든 뒤 브랜치를 추가로 생성하여 옮기기 전까지는 master 브랜치를 가리킨다. (*master)
Merge (병합)
git merge 명령어를 사용하여 브랜치를 병합할 수 있다.
git merge <브랜치명> : 현재 작업중인 브랜치에 다른 <브랜치명>의 브랜치를 가져와 합친다.
* Merge conflict
브랜치를 merge할 때 각각의 브랜치에서 같은 파일의 같은 부분이 서로 다르게 수정된 경우 Merge conflict가 발생한다.
git mergetool --tool vimdiff : mergetool을 사용하여 merge conflict가 발생한 부분을 수정하여 병합하도록 해줌
'Git' 카테고리의 다른 글
[ Git ] 이전 커밋들에서 잘못 작성된 author 변경해주기 (0) | 2023.03.10 |
---|---|
[ .gitignore ] 깃에서 특정 파일 상태 관리 제외하기 (0) | 2022.12.22 |
[ GitHub ] There isn’t anything to compare. (0) | 2022.10.22 |
[Github] VSCODE 와 깃허브(Github) 연동 (0) | 2022.03.30 |
[Github] 깃허브(Github) (0) | 2022.03.30 |