개념 정리
브랜치 특정 기준에서 줄기를 나누어 작업할 수 있는 기능체크아웃 브랜치를 이동하는 명령어. 새 브랜치를 체크아웃 체크박스를 선택하면 브랜치를 만듦과 동시에 그 브랜치로 이동하게 된다. 체크를 해제하고 브랜치를 생성하면 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 |