반응형
브랜치(Branch)란?
- 브랜치란 저장소 내에 존재하는 독립적인 작업관리의 영역으로, 다른 공간에 영향을 받지 않고 커밋을 기록할 수 있는 관리 공간이다.
- 각각의 브랜치는 다른 브랜치의 영향을 받지 않기에 여러 작업을 독립적으로 동시에 진행할 수 있으며, 이렇게 만들어진 브랜치는 다른 브랜치와 병합(Merge)함으로써 작업한 내용을 하나로 합칠 수 있다.
- 브랜치는 당장 배포 가능한 최종본인 통합 브랜치(Integration Branch)와 기능 추가 같은 단위 작업을 위한 토픽 브랜치(Topic Branch)로 나뉜다.
브랜치 관련 용어 정리
- origin : 로컬 저장소를 복제(clone)한 원격 저장소를 의미한다.
- master 브랜치 : 저장소를 생성할 때 기본으로 만들어지는 브랜치에 master라는 기본 이름이 부여되는데, 기본 이름이 master인 브랜치를 말한다.
- master : 해당 브랜치의 끝, 즉 최신 커밋을 참조하는 개체를 말한다.
- HEAD : 현재 사용 중인 브랜치의 선두 부분을 나타내는 이름으로, 쉽게 말해 브랜치의 작업 위치를 나타낸다. HEAD가 이전 커밋을 참조하면 Working directory의 내용이 이전 커밋의 내용으로 변경되며, HEAD는 master와 commit 같이 참조를 참조할 수 있다.
Origin과 Master 브랜치는 Git에서 일반적으로 사용되는 기본 이름으로, 둘 다 사용자가 이름을 변경할 수 있다.
Upstream과 Downstream란? : 두 저장소 간의 관계에 따라 정의되는 상대적인 개념이다. 영어 뜻 처럼 물줄기가 위에서 아래로 내려올 때, 위의 소스 원천을 Upstream이라고 하고 반대로 아래에서 받은 소스를 Downstream이라고 한다. 하나의 Upstream에 여러개의 Downstream이 있을 수 있다.
브랜치 병합의 종류들
3-way merge
- 브랜치에 각각 신규 커밋이 1회 이상 있는 경우, merge를 하면 두 브랜치의 코드를 합쳐서 새로운 커밋을 자동으로 생성해주는데 이걸 3-way merge 라고 부른다. merge의 기본 동작 방식이다.
fast-forward merge
- 새로운 브랜치에만 커밋이 있고 기준이 되는 브랜치에는 신규 커밋이 없는 경우, merge를 하면 따로 합치지 않고 신규 브랜치를 메인 브랜치라 칭하는데 이를 fast-forward merge 방식이다.
- 기준이 되는 브랜치에 신규 커밋이 없으면 자동으로 fast-forward merge가 발동되는데, git merge --no-ff 브랜치명 명령어로 강제로 3-way merge 할 수도 있다.
1. 브랜치 생성 및 삭제
- git branch 로 브랜치 내역을 확인할 수 있는데, * 표시가 있는 브랜치가 현재 브랜치이며 HEAD는 현재 브랜치를 가리키는 포인터다.
- 브랜치를 병합해도 브랜치가 자동으로 삭제되지 않기에 따로 삭제해 주어야 한다.
git branch // 브랜치 목록 표시
git branch 브랜치명 // 해당 브랜치명으로 브랜치 생성
git branch -m 브랜치명 새로운 브랜치명 // 브랜치명 변경
git branch -d 브랜치명 // 해당 브랜치 삭제
2. 브랜치 이동하기
- 예전에는 checkout 을 사용했으나 지금은 switch 를 사용한다.
- 어떤 브랜치에 와있는지 확인할 때에는 git status 를 사용한다.
git checkout 브랜치명 // 해당 브랜치로 전환
git checkout –b 브랜치명 // 브랜치 생성과 동시에 전환
git switch 브랜치명
git switch main // 다시 메인 브랜치로 되돌아갈 때
3. 브랜치 병합하기
- 충돌하는 변경이 없을 경우 자동적으로 병합되지만, 충돌이 있을 경우에는 충돌난 부분을 수동으로 해결한 다음 직접 커밋을 해야 한다.
- 기록을 남겨야하는 중요한 브랜치를 병합할 땐 3-way merge를 쓰고, 기록을 남길 필요없는 쓸데없는 브랜치를 병합할 땐 squash, rebase 쓴다.
merge
- main 또는 master 브랜치에서 git merge 합치려는브랜치명 입력하면, 메인 브랜치에 지정한 브랜치가 합쳐진다.
git merge 합치려는브랜치명 // 현재 브랜치에 해당 브랜치 내용 병합
// fast-forward 관계에 있으면 커밋 생성하지 않고 현재 브랜치 참조값만 변경(기본)
git merge --ff 브랜치명
// fast-forward 관계여도 merged commit 생성
git merge --no-ff 브랜치명
// fast-forward 관계여도 merged commit 생성, merging 브랜치 정보 생략
git merge --squash 브랜치명
git merge --abort // 머지 작업 종료
squash & merge
- --squash 옵션을 지정하여 브랜치를 병합하면, 합쳐질 브랜치의 커밋 내역을 하나로 합쳐서 main 브랜치에 신규 커밋을 생성해준다.
git switch main
git merge --squash 브랜치명
git commit -m '메세지'
rebase & merge
- rebase는 브랜치의 시작점을 다른 커밋으로 옮겨준다.
- rebase 후 merge를 할 경우, 합쳐질 브랜치를 main 브랜치 최신 커밋으로 rebase하고나서 강제로 fast-forward merge 비슷하게 해준다.
git switch 새로운브랜치 // 새로운 브랜치로 이동
git rebase main // 브랜치가 main 브랜치 끝으로 이동
git switch main
git merge 새로운브랜치
Reference
반응형
'Tool > Git' 카테고리의 다른 글
React 프로젝트 깃허브 페이지로 배포하는 방법 (0) | 2025.03.19 |
---|---|
.gitignore로 파일 제외하는 방법 - 생성 및 적용 (0) | 2023.11.05 |
Git push하는데 username과 password 요구할 때, 사용자 이름 및 비밀번호 토큰 발급 방법 (0) | 2023.08.21 |
깃(Git) 문법 - 생성, 푸시, 풀, 복구, 확인 등 (1) | 2023.08.21 |
깃(Git)이란 - 설치, 세팅 및 기본 개념 및 용어 정리 (0) | 2023.08.21 |