728x90
01. 브랜치
- 브랜치는 영어로 나뭇가지를 의미함
- 줄기에서 뻗어나오는 나뭇가지와 같이 버전을 여러 흐름으로 나누어 관리하는 방법
- 버전을 나누는 이유
- 사례1
- A와 B가 협업하여 온라인 쇼핑몰을 만들고 있는 경우, A는 장바구니 기능, B는 주문 목록 기능을 구현
- 각각 기능을 구현하는 과정에서 여러 파일을 추가, 수정, 삭제할 수 있음
- A와 B가 모두 작업을 완료했다면 각자의 작업을 하나로 합쳐야함
- 이 때 각자 추가, 수정, 삭제한 코드를 하나하나 대조해야함
- 코드를 하나하나 대조하면 번거롭기도 하고 실수가 일어날 수도 있음
- 사례2
- 자체 제작한 프로그램을 여러 회사에 납품하는 회사 C는 각 회사의 요구사항에 맞게 조금씩 변경한 프로그램을 납품함
- 만약 C회사의 프로그램이 버전 10.0.0 까지 출시됐고 고객사가 1000개가 넘어간다면
- 각 버전마다 코드를 복사하기엔 너무 번거롭고 비효율적임
- 사례1
- 버전 나누기의 단계
- 브랜치를 나눔
- 각자의 브랜치에서 작업
- (필요한 경우) 나눈 브랜치를 합침
- 위의 사례를 브랜치로 해결한다면
- A와 B는 각자 브랜치를 나누어 '장바구니' 브랜치와 '주문목록' 브랜치에서 작업
- 각자의 작업이 끝나면 브랜치를 합치고 '같은 코드를 다르게 수정한 부분'만 살펴보면 됨
02. 브랜치 실습
- 브랜치 나누기
- 깃이 제공하는 가장 기본적인 최초의 브랜치를 master브랜치라고 함
- 지금까지 만들었던 커밋은 모두 master 브랜치에 속함
- master에 커밋 3개가 있고 master의 최신 커밋에서 foo라는 브랜치를 만들고 foo 브랜치에서 커밋 두개를 추가한다면 master 브랜치의 입장에서는 커밋이 3개뿐이지만 foo 브랜치의 입장에서는 커밋이 5개
- foo브랜치는 master브랜치의 세 번째 커밋에서 뻗어나왔기 때문에 master브랜치의 커밋 3개를 모두 포함
- HEAD
- 현재 작업 중인 브랜치의 최신 커밋을 가리키는 표시
- 일반적으로 현재 작업중인 브랜치의 최신 커밋을 가리키지만 브랜치를 나누고 합치는 과정에서 HEAD의 위치는 자유자재로 바꿀 수 있음
- 체크아웃
- 특정 브랜치에서 작업할 수 있도록 작업 환경을 바꾸는 것
- 특정 브랜치로 체크아웃하게 되면 HEAD의 위치가 해당 브랜치의 최신 커밋을 가리키고, 작업 디렉토리는 체크아웃한 브랜치의 모습으로 바뀜
- 브랜치 이름
- 실무에서는 브랜치 이름 규칙을 정해두는 경우가 많음
- 예) 새로운 기능을 개발하기 위한 브랜치 'feature/새기능', 릴리즈를 준비하기 위한 브랜치 = 'release/릴리즈번호', 버그를 급하게 수정하는 브랜치 = 'hotfix/수정사항' 등
- 실무에서는 브랜치 이름 규칙을 정해두는 경우가 많음
03. 브랜치 병합
- 브랜치 하나로 통합하는 것을 병합, 영어로 merge라고 함
- master 브랜치와 foo 브랜치 병합
- 병합 이후 더 이상 브랜치에 남은 예정 작업이 없다면 해당 브랜치를 삭제하는 것이 좋음
04. 브랜치 충돌
- 브랜치를 병합하는 과정에서 충돌이 발생하는 경우도 있음
- 충돌은 병합하려는 두 브랜치가 서로 같은 내용을 다르게 수정한 상황을 의미
- 충돌이 발생하면 브랜치가 한 번에 병합되지 못함
충돌 해결
- 브랜치를 병합하는 과정에서 충돌이 발생하면 충돌이 발생한 파일들의 충돌을 해결한 뒤 다시 커밋해야만 브랜치가 올바르게 병합됨
- 충돌이 발생한 이유는 병합하려는 두 브랜치가 같은 내용을 서로 다르게 수정했기 때문이므로 충돌이 발생한 두 브랜치 중 어떤 브랜치의 내용을 병합 결과에 반영할지를 직접 선택해야함
- === 기호 윗 부분은 <<<<<HEAD 기호로 현재 HEAD가 가리키는 브랜치(현재 체크아웃한 브랜치)의 내용을 표시
- === 기호 아랫 부분은 >>>>>foo 기호로 foo 브랜치의 내용을 표시
- 충돌 해결
- 내것을 이용해 해결: 현재 체크아웃된 브랜치의 내용을 병합에 반영
- 저장소것을 사용하여 해결 : 병합하려는 브랜치의 내용을 병합해 반영
- vscode등의 편집기를 통해 직접 편집하는 것도 가능
- 충돌을 해결한 것으로 브랜치 병합이 끝난 것이 아님
- 파일 상태로 가서 커밋
- 충돌이 발생했던 브랜치가 성공적으로 병합됨을 확인
05. 브랜치 재배치
- 브랜치의 재배치는 rebase 라고 함
- 브랜치가 뻗어나온 기준점을 변경하는 것
- 예) master 브랜치의 두 번째 커밋에서 뻗어나온 foo 브랜치를 master의 네 번째 커밋에서 뻗어나오도록 변경하는 것
- 브랜치 재배치에서도 충돌이 발생할 수 있음
- 충돌 시에는 앞서 배운 방법으로 해결 가능
728x90
'04_Git' 카테고리의 다른 글
| github사용시, SSH Key 생성 및 등록방법 (0) | 2025.02.24 |
|---|---|
| git다운로드 방법 (2) | 2025.02.24 |
| 04_Git hub (0) | 2025.02.24 |
| 02_Git 버전관리 (0) | 2025.02.19 |
| 01_Git 준비 (0) | 2025.02.19 |