이번 포스팅에서는 깃(Git)의 협업을 위한 명령어에 대하여 공부를 해보고자 한다.
협업(Collaboration)이란?
협업의 사전적 정의는 ‘같은 종류의 생산, 또는 같은 종류의 작업을 여러 사람이 협력하여 공동으로 하는 일'로 표현되어 있다.
한마디로 여러 사람과의 공동작업이라고 할 수 있다.
어느 정도 규모가 있는 프로젝트를 진행할 때는 혼자가 아닌 여러 명의 개발자가 협업하게 된다.
Git은 하나의 프로젝트를 여러 명이서 작업할 수 있는 환경을 제공하므로 협업에 필수적으로 사용된다.
Git으로 작업한 내역을 Github(원격 저장소)에 공유한다.
커밋(Commit)
마무리된 작업에 작업 이력을 기록해서 저장소로 보내는 행위를 말한다.
즉, staging area에 tracked 된 파일들을 저장소에 저장한다.
커밋을 하면 커밋 객체가 생성된다.
커밋을 할 때마다, 이전 커밋에 대한 포인터도 저장한다.
HEAD
HEAD는 현재 체크아웃된 커밋을 가리킨다 = 현재 작업 중인 커밋
HEAD는 항상 작업 트리의 가장 최근 커밋을 가리킨다
작업 트리에 변화를 주는 git 명령어들은 대부분 HEAD를 변경하는 것이다.
브랜치(branch)
기존의 코드와 관계없는 개별적인 작업장이라고 할 수 있다.
필요에 의해 만들어지는 각각의 브랜치는 다른 브랜치의 영향을 받지 않기 때문에, 여러 작업을 동시에 진행할 수 있다.
코드를 여러 가지의 브랜치로 나누어서 관리하면 개발/협업하기 수월하다.
HEAD branch
현재 작업 중인 브랜치
사실은 커밋 사이를 이동할 수 있는 포인터에 가깝다고 할 수 있다.
branch 명령으로 새로운 브랜치를 생성한다.
git branch new-branch
git checkout new-branch
touch a.txt
git commit -am 'Add a file'
체크아웃(checkout)
내가 사용할 브랜치를 지정하는 것을 말한다.
저장소에서 특정 커밋이나 브랜치로 돌아가고 싶을 때 사용한다.
checkout 명령으로 해당 브랜치로 HEAD를 이동시킨다.
checkout(HEAD 지정)은 브랜치뿐만 아니라 커밋에도 가능하다.
한 브랜치에서 다른 브랜치로 합치는 방법
Merge
브랜치끼리 합치는 것을 말한다.
현재 상태의 브랜치에서 다른 브랜치를 가져와 합친다
추가한 브랜치에서 작업이 완료되면 다시 메인 브랜치로 합칠 때 사용한다.
merge commit이 생성된다.
충돌(conflict)이 발생할 수 있다.
충돌(confilct)
merge 과정에서 파일의 이름이 같으면 충돌이 발생한다.
파일이 같고, 수정한 부분이 같다면 충돌이 발생한다.
Rebase
Merge와 Rebase의 실행결과는 같지만 커밋 히스토리가 달라진다.
Merge는 쉽고 안전하지만 커밋 히스토리가 지저분할 수 있고, Rebase는 잘 모르고 사용할 경우 위험할 수 있어 까다롭지만 커밋 히스토리를 깔끔하게 관리할 수 있다.
Rebase는 base를 새롭게 설정한다는 의미로 이해하면 좋다.
두 개의 공통 Base를 가진 Branch에서 한 Branch의 Base를 다른 Branch의 최신 커밋으로 branch의 base를 옮기는 작업을 말한다.
merge와 비슷한 기능이지만 커밋 그래프의 모양이 다르다.
커밋 히스토리가 깔끔해지길 원한다면 이 방법을 사용하면 된다.
rebase를 하면 기존의 커밋을 사용하는 게 아니라 새로운 커밋이 생성된다.
즉, 공유하는 코드는 함부로 rebase를 하면 안 된다.
'Git & GitHub' 카테고리의 다른 글
[GitHub] 깃허브(GitHub)란? (0) | 2022.11.09 |
---|---|
[Git] 깃(Git) 협업을 위한 명령어(2) (6) | 2022.11.07 |
[Git] 깃(Git) 기본 명령어 (0) | 2022.11.05 |
[Git] 깃(Git) 기본 설정 (0) | 2022.11.04 |
[Git] 깃(Git)의 영역 (0) | 2022.11.03 |