Branch란?
Git에서 Branch란 코드의 개발 및 버전 관리를 위해 사용되는 개념으로, 독립적인 작업 공간을 제공하여 여러 개발자가 동시에 다양한 작업을 수행할 수 있도록 합니다.
각 브랜치는 독립적인 작업 영역을 가지고 있으며, 한 브랜치에서의 작업이 다른 브랜치에 영향을 주지 않습니다.그리고 각 브랜치는 다른 브랜치와 병합(merge)될 수 있으며, 브랜치를 사용하면 개발자는 동시에 다양한 작업을 수행할 수 있습니다. 예를 들어, 기능 추가, 버그 수정, 실험적인 코드 변경 등 각각의 목적에 따라 브랜치를 만들고 작업할 수 있습니다.
브랜치 생성 / 이동/ 삭제
브랜치 생성
git branch "브랜치 명"
브랜치 목록 확인
git branch
생성한 브랜치로 이동
git switch "브랜치명"
// 브랜치 생성과 동시에 이동을 원한다면
git switch -c "브랜치명"
브랜치 삭제하기
git branch -d "삭제할 브랜치명"
// 지워질 브랜치에만 있는 내용의 커밋이 있을 경우엔 대문자 사용 ( -D )
여러 브랜치를 생성하였을 때 예시
Branch를 합치는 두가지 방법(merge, rebase)
Merge는 두개의 다른 브랜치를 하나로 합치는 방법으로, 주로 다른 브랜치에서의 작업을 현재 브랜치로 통합하는데 사용합니다. 이때 통합하기 위해 새로운 커밋을 생성하여 두 브랜치의 변경 내용을 합친 결과를 저장합니다.
Rebase는 현재 브랜치를 다른 브랜치의 최신 커밋으로 이동시키는 방법으로, 주로 현재 브랜치에서의 작업을 다른 브랜치의 변경 내용 위에 다시 적용하고자 할때 사용됩니다. 이때 커밋을 재배치하여 변경 이력을 선형적으로 유지합니다.
그림들을 통해 두가지 방법에 대해 좀더 상세히 알아보겠습니다!
두 브랜치 작업 내용이 채택되어 매인 branch로 통합하려는 상황을 가정해보겠습니다.
위 그림은 Merge 이후 프로젝트 상태를 보여줍니다. Merge의 경우 두개의 브랜치를 이어 붙이는 과정에서 새로운 커밋이 생기고, 새로 생기는 커밋에는 원래 브랜치와 병합될 브랜치의 모든 변화들이 담깁니다. 이러한 방식은 브랜치 사용내역을 남길 필요가 있을 때 적합한 방식입니다.
반면 Rebase의 경우, 새로 커밋을 생성하는 것이 아닌 브랜치를 다른 브랜치에 이어붙이게 됩니다. 이는 한줄로 깔끔히 정리된 내역을 유지하기 원할때 적합하나, 이미 팀원과 공유되노 커밋들에 대해서는 사용하지 않는 것이 좋습니다.
Merge로 합치기
예를들어 main 브랜치에 branch-1을 병합하고자 한다면 우선 git switch main(head를 메인으로)을 한 후
git merge branch-1
위의 명령어를 수행하면 됩니다.
합친 경우
이렇게 merge를 할때 각 내용들의 충돌이 발생할 수 있습니다.
<<<<<<< HEAD
main job:
job1
job2
=======
branch-1:
job-1
job-2
>>>>>>> branch-1
예를 들어 위와 같이 충돌이 일어났다면 충돌을 해결한 후 다시 add 후 commit 하면 됩니다.
만약 당장 충돌 해결이 어려운 경우엔 git merge --abort를 한 후, 해결 가능 시 수정후 git add., git commit으로 병합하면 됩니다.
병합한 브랜치는 보통 삭제하는 경우가 많기에
git branch -d branch-1
아래와 같이 삭제를 진행하시면 됩니다 :)
Rebase로 합치기
Rebase를 할때는 Head가 위치해야할 곳이 Merge와 다릅니다. 앞선 Branch-1을 Main에 Merge하기 위해서는 Main으로 이동하였는데, Branch-2를 Main에 Rebase 하기 위해서는 우선 Head를 Branch-2로 이동해야합니다.
git switch Branch-2를 한 이후
git rebase main
이때 프로젝트의 상태를 보면 main 브랜치가 뒤쳐져있는 상태임을 확인할 수 있습니다.
따라서 main 브랜치로 이동한 후 branch-2의 시점으로 fast-forward하는 작업이 필요합니다.
git merge branch-2
rebase 역시 충돌 해결이 당장 어렵다면
git rebase --abort
로 rebase를 중단한 다음 충돌 부분을 수정 한 뒤 git add . 하면됩니다.
git rebase --continue
이후 충돌이 모두 해결될때 까지 위 명령어를 반복하면 됩니다.
'Git&GitHub' 카테고리의 다른 글
커밋 관리하기(커밋 컨벤션, hunk, stash, 과거 커밋 수정,삭제,병합,분할) (0) | 2023.06.23 |
---|---|
Git 심화개념 - 2(HEAD, Fetch vs Pull) (0) | 2023.06.23 |
Git 심화 개념(SnapShot, 분산 버전 관리, Git의 3가지 공간) (0) | 2023.06.23 |
git add, commit, reset, revert (0) | 2023.06.22 |
Git 최초 설정 및 프로젝트 관리 (0) | 2023.06.22 |