본문 바로가기
개발 지식/Git&GitHub

[Git&GitHub] 3. 브랜치(branch)

by seoni00 2024. 5. 13.

안녕하세요

우당탕탕 개발중인

seoni입니다😆

 

오늘은 branch에 관한 공부기록을 남겨보려고 합니다.


1. 브랜치란?

브랜치는 "나뭇가지"라는 뜻으로,

버전을 여러 방향으로 관리하거나,

새로운 기능을 추가하거나,

또는 협업할 때 주로 이용이 됩니다.

 

예를 들어, A와 B가 협업하여

네이버 포탈을 똑같이 구현하겠다고 가정하겠습니다.

현재 검색엔진과 로그인 기능이 구현되어 있다고 할 때,

A씨는 블로그 기능을, B씨는 카페 기능을 구현하기로 했습니다.

만약 원래 코드를 복사하여, A씨와 B씨가 각각 맡은 기능을 구현한다면 어떻게 될까요?

합칠 때 문제가 발생하게됩니다.

서로 어떤 코드를 수정하고 추가했는지 일일이 대조를 해야하기 때문입니다.

 

그런데 이를 git의 branch를 이용한다면,

코드를 통째로 복사할 필요 없이,

충돌 검사를 해주고, 수정된 부분을 나타내주기 때문에 이것만 확인하면 될 것 입니다.

 

2. 브랜치 활용 순서

 1) 브랜치 생성하기

 2) 각자 브랜치에서 기능구현하기

 3) 브랜치를 합치기

 

1) 브랜치 생성하기

브랜치 이름

master브랜치(main 브랜치)= 최초의 브랜치이자 가장 기본 브랜치

위 사진을 예시로 든다면,

파란색 =  master branch

빨간색 = blog branch

노란색 = cafe branch 입니다.

 

이때 네이버 로고 이미지 변경까지

각 branch의 커밋의 갯수를 파악해보면,

master branch는 3개(검색엔진 기능, 로그인 기능, 네이버 로고이미지 변경),

blog branch도 3개(검색엔진 기능, 로그인 기능, 블로그 기능)

cafe branch는 2개(검색엔진 기능, 로그인 기능 //카페기능은 아직 구현안된 상태)가 됩니다.

 

2) 각자 브랜치에서 기능구현하기

HEAD: 현재 브랜치의 최신 커밋을 가리킴. 

체크아웃: HEAD의 위치를 바꿔, 작업하고 싶은 브랜치로 이동

blog branch의 가장 최신 commit인 "블로그 기능"을 HEAD가 가리킴

 

-> cafe branch로 체크아웃

cafe branch의 가장 최신 commit인 "카페 기능"을 HEAD가 가리킴

3)  브랜치를 합치기 (= merge)

브랜치들을 합쳐 하나의 코드로 만드는 것을 말합니다.

 

위 그림에서는

blog branch와 cafe branch를 합쳐

master branch에 새로운 커밋("merge branch")이 생성됩니다.


3. 실습

실습 내용: branch를 생성하여 내 정보를 자기소개서(master branch)에 추가하기

 

1) 현재 commit 상태를 위와같이 만들어주기

 

2) 브랜치 생성해주기

브랜치 클릭 > 브랜치 이름: myInfo > 브랜치 생성

 

검은색 원 = HEAD (현재 내가 작업 중인 branch)

 

3) myInfo 브랜치에 자신의 이름을 추가한 text파일을 commit하기

이때 커밋 메시지는 myInfo 3이라고 작성해주세요😊

 

4) master 브랜치의 commit과 myInfo 브랜치의 commit 상태를 비교하기

master 브랜치로 체크아웃하기: 마우스 우클릭 > 체크아웃 master // 혹은 그냥 master를 더블클릭

검은 원 이동확인
text 파일 직접 열어서 확인하기

 

 

5) myFavorite이라는 이름을 가진 브랜치를 master branch위에 생성

현재 commit 상태

6) myFavorite 브랜치에 자신이 좋아하는 것을 text파일에 적고, commit

myFavorite 브랜치

 

7) myInfo 브랜치와 myFavorite브랜치를 master브랜치에 합치기

  • myInfo 브랜치를 master브랜치에 먼저 합치기

master브랜치로 먼저 체크아웃
그 후 myInfo에 마우스 우클릭 > 현재 브랜치로 myInfo 병합

 

myInfo가 master 브랜치에 병합된 결과창
이후, myInfo 브랜치 삭제

 

  • myFavorite 브랜치도 master브랜치에 합치기

*이번에는 아마 충돌이 발생할 것입니다.

왜 발생하는 지 한번 예상해보고 따라와주세요😆

현재 commit 상태

 

 

💥충돌발생💥

충돌 발생

 

충돌이 발생한 이유 혹시 예상해보셨나요?

그 이유는 master브랜치의 text파일과, myFavorite브랜치의 text파일 내용이 충돌하기 때문입니다.

위 사진에서 볼 수 있듯이,

3행에서 master 브랜치는 I'm YeongSeon Jang이고

myFavorite 브랜치는 I like dancing이라고 되어 있기 때문에

충돌이 발생했습니다.

 

충돌이 나면, git은 충돌이 발생한 부분을 알려줍니다.

밑의 사진에서 text파일 내용을 한번 봅시다.

 

<<<<<<<<HEAD
/*HEAD가 가리키는 브랜치 내용*/
=======
/*myFavorite 내용*/
>>>>>>> myFavorite

 

따라서 충돌을 하기 위해서는 HEAD가 가리키는 브랜치와 myFavorite 브랜치 중에 하나를 택해야 합니다.

이는 밑에서 더 자세히 설명드리겠습니다.

 

8) 충돌 해결하기

충돌 해결하는 방법: 어떤 브랜치의 내용을 반영할 지 선택 -> 다시 커밋

'내것'을 이용해 해결=현재 branch로 선택

'저장소'것을 사용하여 해결=병합하려고 했던 branch로 선택

확인
자동으로 적힌 commit message 확인>커밋
텍스트 파일 확인


10. 브랜치 재배치 --공사 중

 

 

*참고자료: 모두의 깃&깃허브 - 강민철