-
[Github]브랜치란?Github 2020. 11. 21. 23:07
브랜치란?
개인이 깃을 통해 버전 관리를 하는 상황에서, 어떠한 기능을 처음 개발하는데 도중에 문제가 생겼다고 한다면
그저 지금까지 해왔던 변경사항들을 버리고 이전으로 되돌아가면 해결이 되겠지만,
회사 업무 등과 같이 여러 사람들과 함께 협업해서 진행해야하는 프로젝트라면 이야기가 많이 달라진다.
예를 들어 어떤 대형 프로젝트를 개발 중에 한 사람이 새로운 기능을 개발해서 변경 사항을 커밋했는데,
전체 프로젝트에 그 내용이 적용되어 그 프로젝트를 개발 중인 다른 사람들에게도 그 영향이 미치게 되었다.
그런데 그 기능이 심각한 오류를 일으킨다면, 전체 프로젝트에도 문제가 생겼다면 통합 버전을 사용하던 모든 사람들에게도 영향이 가버리고,잘 진행되던 프로젝트는 마비 상황에 이르게 될 것이다.
출처-우아한 형제들 기술 블로그 이러한 상황을 막기 위해서뿐만 아니라, 다른 사람들과도 여럿이 협업할 수 있도록 하게 만들어진 기능이 바로 브랜치이다.
전체 프로젝트의 완성본에 해당하는 버전의 이력을 따로 두고,
만일 신 기능이나 급하게 변경해야 하는데 바로 통합 프로젝트에 적용해서는 안되는 부분이 있다면,
완성본에서 분기하여 독립적으로 새로운 별도의 가지를 추가하여 변경 이력을 만들도록 하는 것이 브랜치라고 할 수 있다.
모든 브랜치의 시작점이자 브랜치가 통합되어야 할 원본의 브랜치를 보통 마스터 브랜치 또는 통합 브랜치(Integration branch)라고 부르고,그리고 그런 마스터 브랜치로부터 분기되어 나온 브랜치들을 토픽 브랜치(Topic branch)라고 부른다.
토픽 브랜치에서 해야할 일이 전부 끝났다고 판단되어 더 이상의 변경 이력을 만들 필요가 없을 경우,
통합 브랜치로 병합(Merge)하여 토픽 브랜치의 변경 이력을 통합 브랜치에도 동일하게 적용되도록 할 수 있다.
브랜치 병합하기
마스터에서 분기되어 나온 브랜치를 병합하려는데,
이후로 변경된 것은 브랜치 뿐이고, 마스터의 경우 변경된 사항이 없는 경우에는 병합이 매우 쉽게 진행되는데,
이를 "fast-foward"(빨리감기) 병합이라고 한다.
하지만 브랜치의 변경이 진행되면서 마스터에도 변경이 계속 진행된 경우,
두 브랜치의 변경 사항을 통합하여 병합 커밋(merge commit)을 진행하게 된다.
그런데 두 변경 사항이 같은 곳에서 진행되어 병합이 진행될 때 충돌이 발생하게 되는 경우가 생길 수 있다.
이 경우에는 rebase 병합을 이용할 수 있다.
말그대로 브랜치의 분기 시점을 이동하는 것으로서
토픽 브랜치를 마스터 브랜치의 앞에 두되,마스터의 HEAD 포인터는 그대로 두게 되어,충돌을 피할 수 있다.
충돌 사항을 변경하고 난 뒤, 마스터 브랜치를 빨리 감기 병합하여, 모든 변경 사항을 통합할 수 있다.
얼핏 보면 일반 merge와 rebase의 차이점이 무엇인가?하고 의문을 던질 수 있겠지만,
일반 merge의 경우 마스터 브랜치에 토픽 브랜치의 내용을 적용하는데에 주로 사용된다면,
rebase의 경우 토픽 브랜치의 분기 시점을 마스터의 최신 HEAD로 옮김으로서,
토픽 브랜치 진행 중 마스터 브랜치의 변경 사항을 적용한 채로 변경을 진행하는 데에 유용하게 이용될 수 있다.
직접 브랜치 만들고 병합해보기
우선 git branch 명령어를 실행하면,
현재 존재하는 브랜치들과 위치하고 있는 브랜치를 *로 표시해준다.
git branch "브랜치 이름"
으로 명령을 실행하면 해당 이름으로 브랜치가 새롭게 만들어진다.
git checkout "브랜치 이름"
명령을 실행하면 해당 브랜치로 이동할 수 있으며,
git merge "브랜치 이름"
으로 현재 위치한 브랜치에서 다른 브랜치를 병합할 수 있고,
fast-forward 병합이 진행된 것을 확인 할 수 있다.
기타 브랜치 관련 명령어
git branch -d "브랜치 이름" 브랜치 삭제
git checkout -b "브랜치 이름" 해당 이름으로 브랜치 생성 후 해당 브랜치로 체크아웃
참고 및 이미지 출처
'Github' 카테고리의 다른 글
[GitHub] Rebase -i로 커밋 합치고 편집하기 (0) 2020.12.20 [GitHub] Tag란? (0) 2020.12.19 [Github] Stash란? (0) 2020.11.24 [GitHub] Git push 오류 - fatal: The current branch master has no upstream branch.To push the current branch and set the remote as upstream, use 해결방법 (0) 2020.11.07 [GitHub] 원격 저장소에 깃 연결하기 (0) 2020.11.05