gimyeondong
2024. 6. 8. 18:55
2024. 6. 8. 18:55
branch
- git에서 브랜치는 개발의 독립적인 라인
- 소프트웨어 개발시 개발자들은 동일한 소스코드를 함께 공유하고 다룸 -> 각각 서로 다은 버전의 코드가 만들어짐
- 여러 개발자들이 동시에 다양한 작업을 할 수 있게 해주는 기능이 브랜치(Branch)
- 각각의 독립적인 작업 영역(저장소) 안에서 마음대로 소스코드를 변경할 수 있음
branch의 이해
- git으로 버전관리 시작시 기본적으로 브랜치가 생성된 상태로 작업 수행 (메인 브랜치)
- 마스터 브랜치가 존재하는 상황에서 수정 또는 새로운 개발이 필요하다면 이를 바로 마스터 브랜치에서 수정하는 것이 아니라 새로운 브랜치를 생성하여 수정
- merge 기능을 통해 브랜치간 차이점을 비교하고 통합을 하게 된다.
git flow
- Git Flow는 Git으로 형상관리를 할 때 브랜치를 효율적으로 관리하기 위해 사용하는 브랜치 관리 전략이다.
- git flow에서 사용하는 branch의 종류
- master : 제품으로 출시될 수 있는 브랜치
- develop : 다음 출시 버전을 개발하는 브랜치
- feature : 기능을 개발하는 브랜치
- release : 이번 출시 버전을 준비하는 브랜치
- hotfix : 출시 버전에서 발생한 버그를 수정 하는 브랜치
branch 생성
git branch : 현재 branch 확인
git branch 신규브랜치명 : 신규 branch 생성
git log : 만들어진 브랜치 확인, 현재 작업 중인 Head 브랜치 확인
git checkout 이동할브랜치명 : 브랜치 이동
branch 병합
두 개의 브랜치가 서로 다른 파일을 작업 한 경우 병합
- Merge 명령어로 작업 (충돌없음)
- 병합의 주체가 마스터 브랜치이기 때문에 현재 HEAD가 마스터 브랜치를 가리키고 있는지 확인
서로 같은 파일 내 다른 위치를 수정했을 때 병합
서로 같은 파일 내 같은 위치를 수정했을 때 병합
- Conflict(충돌) 발생 -> Merge 작업 중단, 해당 내용을 직접 수정한 후 다시 merge 실행
- 개발 수행시에 업무 영역을 최대한 잘 정의하여 브랜치 merge해야함
branch 병합 원리
fast-forward merge
- 신규 브랜치를 생성한 후 master branch에 변화가 없는 경우
- fast-forward 관계에 있는 브랜치에서 git merge 명령을 입력하면 새로운 commit이 생기지 않음
- 이전 브랜치의 참조 객체가 앞서있는 브랜치가 가리키는 개체를 참조하도록 이동
3-way merge
- 공통 부모를 가리키는 커밋을 중심으로 merge 커밋이 생성되는 방식을 3-way merge라고 한다.
- Master에도 변경 사항이 생기고, 특정 Branch에도 변경사항이 생겼을 때 병합하면 Merge Commit이 생기면서 양쪽 변경점을 모두 포함한 상태로 Merge가 된다.
rebase
- 공통 base(조상)를 가진 두 branch에서 하나의 branch 의 base를 다른 branch 의 최신 Commit을
base로 하게끔 재정렬 하는 것을 의미
- 병합의 명령어라기 보다는 브랜치의 commit을 정리하는 명령어
- merge 에 비해 commit log 를 깔끔하게 관리 할 수 있음
- Merge는 branch를 통합하는 것이고, Rebase는 branch의 base를 옮 긴다는 개념의 차이
branch 관리
branch 삭제
- 병합된 branch 삭제할 때는
git branch –d branch-name 명령을 통해 삭제가 가능하다.
- 병합되지 않은 branch를 삭제할 때는
git branch –D branch-name 으로 삭제가 가능하다.