개념 정리
브랜치
특정 기준에서 줄기를 나누어 작업할 수 있는 기능체크아웃
브랜치를 이동하는 명령어. 새 브랜치를 체크아웃
체크박스를 선택하면 브랜치를 만듦과 동시에 그 브랜치로 이동하게 된다. 체크를 해제하고 브랜치를 생성하면 HEAD
는 여전히 master
를 가리킨다.병합merge
두 버전의 합집합을 구하는 것.
여러 사람이 동시에 버전 관리를 해야한다면 ?
- 서로의 작업물에 의존하지 않고 내가 원할 때 코드를 올리고, 또 내가 원할 때 협업자의 코드와 합칠 수 있다.
- 특정 기준에서 줄기를 나누어 작업할 수 있는 기능을 브랜치라고 한다.
- 새로운 가지로 커밋을 만들려면 반드시 브랜치를 먼저 만들어야한다.
- 여러 작업자가 한 커밋을 기준으로 커밋을 만드려고 한다면 오류가 난다.
- 먼저 커밋한 사람은 정상적으로 올라가고, 늦게 커밋한 사람은 ‘최신 코드에 푸시하라’라는 오류가 난다.
브랜치에 커밋을 올린다(X) 가리킨다(O)
- 나뭇가지처럼 물리적으로 ‘길’이 존재해서 그 길에 올리는 것이 아니라 단순한 ‘포인터’다.
- 커밋1, 커밋2, 커밋3을 만들었다고 가정할 때 master 브랜치의 포인터가 최신 커밋을 가리키고, 커밋4를 올리면 master 브랜치는 커밋4를 가리킨다.
- 분기를 만드려면 프로젝트를 통째로 복사해서 무겁고 시간이 많이 걸리는 svn과 달리 git은 가볍고 빠르다.
브랜치 사이를 넘나들기 HEAD
master
브랜치와고양이
브랜치를 넘나드는 방법으로HEAD
라는 특수한 포인터가 있다.HEAD
는 브랜치 혹은 커밋을 가리키는 포인터인데,HEAD
를 이용해서 브랜치 사이를 마음대로 넘나들 수 있다.HEAD
는 브랜치의 최신 커밋이 아닌 과거 커밋으로도 이동 시킬 수 있다. 이런 경우에는master
브랜치의 포인터와 HEAD가 떨어져있기에 분리된 HEAD (Detached HEAD
)상태가 된다.
새 브랜치 만들기
- 보통 하나의 개발 브랜치에는 한 사람만 작업해서 올리는 것이 바람직하다. 그래야 버전이 꼬일 걱정이 없다. 그렇기 때문에 여러 사람이 작업하는 원격저장소에는 미리 브랜치 규칙을 정하는 것이 일반적이다.
- 예시로 간단한 4가지 규칙
master
브랜치에는 직접 커밋을 올리지 않는다.- 기능 개발 하기전에 브랜치를 기준으로 새로운 브랜치를 만든다.
- 브랜치 이름은
feature/기능이름
형식으로 하고 한 명만 커밋을 올린다. feature/기능이름
브랜치에서 기능 개발이 끝나면master
브랜치에 이를 합친다.
브랜치 이동하기
- 병렬로 커밋을 올리기 위해서는 브랜치를 새로 만들어야한다.
- master 브랜치로 돌아가서 새로운 브랜치를 생성한다.
!
master
브랜치로 이동하지 않고feature/detail-page
에 남아서 브랜치를 만들면 수정본까지 모두 반영이 되는 불상사가 생긴다.!
브랜치를 만들때는 base 브랜치를 잘 설정해야한다.
병합 Merge
- 병합 커밋
Merge Commit
: 서로 다른 내용이 커밋 되었을때 합체 - 빨리감기
Fast-forward
: 기존커밋에 추가된 내용이 있을때 - 충돌
Conflict
: 같은 부분을 수정했을 때
- 병합
Merge
브랜치와 브랜치를 합치는 명령어를 말한다. - 브랜치를 기준으로 병합한다의 의미?
- A브랜치와 B브랜치를 합쳤을때 만들어진 AB 브랜치를 A브랜치에 올릴지, B브랜치에 올릴지 정하는것. 만약 A브랜치에 올린다면 AB브랜치가 A브랜치에만 반영되고 B브랜치는 B인 상태 그대로.
충돌 Conflict
- 마스터 브랜치와 A 브랜치가 있다고 가정한다.
- 병합중에 코드가 깨질 수 있으므로 전용 A브랜치에 마스터 브랜치를 땡겨와서 A브랜치에 병합한다 (
master
→A브랜치
) - 문제가 없는지 확인한다.
- 병합커밋을
master
브랜치에 반영한다 !
물론master
브랜치에 바로 병합해도 상관은 없다. 충돌이 나더라도master
브랜치에서 해결하면 된다. 하지만 다른 사람이 불편해지는 상황을 방지하기 위해 개인A 브랜치
에서 먼저 병합하는 것이 좋다.- 충돌 수정하기
<<<<<<< HEAD
어쩌구 저쩌구 // (1)새로 추가한 코드
=======
저쩌구 어쩌구 // (2)다른 누군가가 수정한 코드
>>>>>>> master
- 충돌을 해결한 뒤 master 브랜치에도 반영한다.
- 충돌이 난 코드 위에서 아래 버튼을 누를 수 있다.
Accept Current Change
위의 코드만 남기기Accept Incoming Change
아래의 코드만 남기기Accept Both Change
위아래 모두의 코드가 남는다.Compare Changes
비교하기 편한 view로 전환한다.
- 충돌이 난 코드 위에서 아래 버튼을 누를 수 있다.
예의바르게 브랜치 합치기 Pull Request
- 코드 충돌만 해결했다고 master 브랜치에 병합해서는 안된다.
- master 브랜치에 완벽한 코드만 두기로 했다면, 이 브랜치에서 무엇을 바꾸었는지 협력자
Collaborators
가 확인할 수 있는 과정을 거쳐야한다. 이때Pull Requset
를 사용한다. - A브랜치로 B브랜치를 병합해도 되겠니? 수정사항은 다음과 같아 ! 라는의미
- 초록색
Compare & Pull Request
버튼은 최근에 푸시한 브랜치가 있을때만 보여진다. 다른 브랜치로 풀 리퀘스트를 보내고 싶거나, 직접 설정을 변경하고 싶다면 그아래줄 좌측의New Pull Request
버튼을 클릭하면 된다. - Pull Request 를 눌렀을때 먼저 설정해야 할 것은 베이스
base
브랜치와 비교Copmare
브랜치이다. 병합 결과물이 올라갈 기준이 되는 브랜치가 base브랜치, 현재 기준 브랜치의 비교대상이 되는 브랜치가 비교Compare
브랜치.
반응형
'Tool' 카테고리의 다른 글
[Git]04 - amend / cherry-pick / reset / revert / stash (0) | 2022.11.01 |
---|---|
[Git]03 - upstream / PR / fork / rebase / merge 전략 (0) | 2022.11.01 |
[Git]01 - 기본개념 / 시작하기 / 커밋 / 원격저장소 (0) | 2022.06.02 |
git 프로젝트 복제 / clone (0) | 2021.10.17 |
Netlify 배포 (+babel-loader, webpack mode 에러 등) (0) | 2021.10.17 |