메타코딩 -무작정 깃허브 찍먹하기 -3- (Git branch 기본개념 및 브랜치 포인터 개념)

2023. 2. 21. 23:59프로젝트 관리/github

우리가 커밋을 하게 되면 기본적으로 main branch가 하나 생기게 된다.

요런 식으로 그러면 시나리오를 하나 만들어 보자. 내가 만약 블로그를 만드는 중인데. 1.회원가입 2.로그인 순으로 커밋을 했다고 생각 해 보자.

위의 그림처럼 순차적으로 브랜치가 생성되고 헤더도 가장 최근 커밋을 바라보고 있을 것이다.

그런데.. 회원가입 로그인을 만들고 나니까. 꼭 해보고싶은 아이디어가 있다. 아이디 중복체크를 가지고 하자~ 또는 하지말자 ~ 라고 의견들이 나오는데.. 

그러면 아이디어 branch라는 새로운 가지를 하나 만들고, 로그인의 끝점을 그대로 가져온다. 그렇게 되면 아이디어 branch는 회원가입과 로그인에 대한 모든 history를 다 들고 있는 branch이다.

엄밀히 따지자면 새로운 가지는 아니고 로그인에서 부터 나온 가지다. 그러면 메인 작업을 해야할 글쓰기기능을 구현하고, 시간이 남을때마다 idea branch에서 중복체크 기능들을 다 만들어 준다. 그러면 프로젝트의 pm에게 해당 중복 체크 기능구현을 알리고, pm은 idea branch에서 해당 기능의 작동을 확인한다.

pm이 기능을 확인하고 좋다고 생각해. 처음엔 생각하지 않았던 기능을 사용하고 싶어서 branch를 합치고 싶은데 문제가 있다. 파란 네모 안에 들어가있는 형상까지는 두 branch가 동일한데 글쓰기와 아이디중복체크등 나머지 형상이 다르다. 현재 하고싶은 것은 글쓰기 앞에 아이디 중복체크 완료의 점을 찍고싶은 건데.. 메인 branch에서 분기점을 공통 조상이라고 한다.

그러면 Git에서 알아서.. 위에 그림처럼 제일 끝점(로그인, 글쓰기 ,아이디 중복체크완료) 3개로 합쳐준다.. 이것을 merge 라고 한다.

정확하게는 3-way merge라고 하는데 자기가 알아서 분석을 해준다. 동일 파일 수정이 존재하는지, 잘못된것이 없는지.. 그러면 새로운 시나리오를 한번 만들어 보자.

쭉 만들었는데.. 형상이 다르지가 않다~ ..? 그러면 끝점 2가지만 사용해서 merge를 한다. 이 것을 fast-forward merge 라고 한다. 

fast-forward merge는 형상이 같을때 사용하는 것, 3-way merge는 형상이 다를때.. 이 것만 기억하자. 

 

그러면 이제 branch pointer에 대해 알아보자.

기본적으로 init, add, commit을 하면 branch가 사실은 생기는게 아니라. 원래 존재하는 곳에 회원가입 이라는 점이 생긴다. 그리고 main branch pointer가 그 것을 바라보게 된다. 그리고 로그인을 동일하게 생성하면 MB가 로그인으로 옮겨가게 된다.

그래서 이 전처럼 중복체크 로직을 만들고 싶어서 브랜치를 새로 따서 baranch 명을 topinc 으로 만들면 어떤일이 생기냐면 위의 그림처럼 topic branch pointer가 해당 commit부분을 바라보게 된다. 그러면 로그인 밑에 새로운 기능을 추가해서 넣으면 어떻게 되냐면..

그림처럼 토픽브랜치 포인터만 이동을 하게된다. 그래서 만약에 지금처럼 기능을 만든 것이 main 이랑 merge를 하면 어떻게 될까..?

걍 해당 메인 프랜치 포인트만 내려와서 머지가 된다. 이 것을 엄청 빠르다고 해서 fast-forward merge라고 하는 것이다.

그러면 3-way merge도 그림을 통해 알아보자.

현재 상태는 TB에서 작업을 하던 중에 MB에 글쓰기라는 기능을 만들때 이때 실제로 가지가 생기게 되는 것이다.

그러면 글쓰기 기능을 만들었는데 MB포인터를 TB랑 합치게 되면 글쓰기 기능이 사라지게 된다. 새로운 점을 생성해서 merge를 한다.

새로운 merge 포인트를 생성후 거기로 MB 포인터가 이동을 하고 TB는 그대로 유지된다. 이 것을 3-way merge라고 한다!.

개념은 여기까지 알아보자.