티스토리 뷰

Study/git

[git 기초] 브랜치 branch 흐름 정리

우징어🦑 2021. 9. 5. 00:09

$ git branch : 브랜치 목록 보기. 목록에서 *이 붙은 건 현재의 브랜치

$ git branch —merged / $ git branch —no-merged : merge된 브랜치인지 아닌지 목록

merge되지 않은 브랜치는 아직 merge하지 않은 커밋을 담고 있기 때문에 git branch -d 명령으로 삭제할 수 없다.

강제 삭제는 -D

 

 

브랜치와 merge 기초

아래 상황에 따라 알아보자!

나는 현재 hotfix 만들고 merge하는게 서툴러서 <상황2>의 3번 과정 부터 자세히 다룰 것이다!

 

<상황1> 

1. 웹사이트가 있고 뭔가 작업을 진행하고 있다.

2. 새로운 이슈를 처리할 새 Branch를 하나 생성한다.

3 새로 만든 Branch에서 작업을 진행한다.

<상황2> 

이때 중요한 문제가 생겨서 그것을 해결하는 Hotfix를 먼저 만들어야 한다.

그러면 아래와 같이 할 수 있다.

1. 새로운 이슈를 처리하기 이전의 운영(Production) 브랜치로 이동한다.

2. Hotfix 브랜치를 새로 하나 생성한다.

3. 수정한 Hotfix 테스트를 마치고 운영 브랜치로 Merge 한다.

4. 다시 작업하던 브랜치로 옮겨가서 하던 일 진행한다.

 

 

중간에 버그를 수정하기 위해 만든 hotfix 브랜치에서 작업을 완료하고 master에 합쳐야 할 때

merge 전

$ git checkout master : 우선 master 브랜치로 이동한다.

$ git merge hotfix : hotfix가 가리키는 C4커밋이 master의 C2커밋에서 기반한 것이기 때문에 merge과정 없이 그저 최신 커밋으로 이동한다. 이 과정을 Fast-forward라고 한다.

master브랜치와 hotfix브랜치 merge 후

merge 후 같은 커밋을 가리키는 master와 hotfix

 

$ git branch -d hotfix 버그를 해결하여 더이상 쓸모 없어진 hotfix브랜치는 삭제한다. (선택)

 

 

 

 

이제 다시 iss53을 처리하러 가보자.

merge 전

master와 별개로 작업중인 iss53 53번 이슈를 다 구현하고 master브랜치에 merge하는 과정

$ git checkout master : 마찬가지로 master 브랜치로 이동한다.

$ git merge iss53 : 합치고자 하는 브랜치 iss53을 merge한다.

이때는 iss53과 master가 각각 다른 커밋에서 기반하기 때문에 3-way merge가 일어난다.

각 브랜치(master, iss53)들이 가리키는 커밋 두개를 합친 공통 커밋 하나를 생성하여 merge한다.

따라서 별도로 생성된 C6 커밋을 가리키게 된다.

master 브랜치와 iss53 브랜치 merge 후

$ git branch -d iss53 마찬가지로 issue를 해결하여 쓸모없어진 iss53 브랜치는 삭제하면 된다.

 

충돌 (conflict)

merge를 할 때 실패하는 경우가 있다. 바로 충돌(conflict)이 나는 경우이다. 

충돌은 두 브랜치에서 공통된 부분을 수정했을 때 발생한다. 충돌이 나면 conflict 메세지가 출력되고, merge되지 않는다.

즉 3-way merge가 실패한다.

 

$ git status : 어떤 파일에서 충돌이 일어났는지 볼 수 있다.

충돌이 일어난 파일은 unmerged 상태로 표시된다.

 

충돌난 부분은 수동으로 해결한다. 해당 파일에 가보면 git이 친절하게 충돌난 부분을 눈에 띄게 /////// 등의 표시로 표시해준다. 

해결하고 나서 $ git status 명령을 통해 충돌이 잘 해결됐는지 다시 한번 확인할 수 있다.

충돌을 해결했으면

$ git add .

$ git commit 을 통해 merge한 것을 커밋한다.

 


이 글은 아래 git 공식 페이지를 참고하면서 공부해본 내용을 정리한 것이다. 더 상세한 설명과 예시를 보고 싶으면 아래 참고 사이트를 참고하길 바란다!

 

<참고사이트>

 

Git - 브랜치와 Merge 의 기초

Merge 시에 발생한 충돌을 다루는 더 어렵고 요상한 내용은 뒤에 고급 Merge 에서 다루기로 한다.

git-scm.com