Git

Git 5강. branch, merge

JJJAEOoni 2022. 2. 1. 21:35
반응형

블로그 프로젝트를 만든다고 가정해보자.

 

main branch에서 회원가입 파일을 만들고 commit,

로그인 파일을 만들고 commit 한 상태이다.

 

직원 한 명이 아이디어를 냈다.

아이디 중복체크를 구현해보는 게 어때요? 하고.

 

그럼 너 그거 만들어봐! 하고

idea branch를 따로 만들었다.

 

idea 브랜치는 로그인에서 파생되어 

main 브랜치의 모든 히스토리(회원가입, 로그인)를 갖고 있는 브랜치이다.

이때 로그인이 main 브랜치의 분기점이 되는것이고

main과 idea 브랜치의 공통 조상, 뿌리가 된다.

 

idea 브랜치에서 아이디 중복체크를 완료하고

완성된 중복체크 프로그램이 마음에 들어서

main 브랜치와 합치고 싶을 때

merge를 사용해준다.

 

그런데 main 브랜치와 idea 브랜치의 형상이 다르다.

 

idea에서 아이디 중복체크를 하는 동안

main에서 글쓰기를 commit 했기 때문이다.

 

형상이 다른 두 브랜치를 어떻게 합칠까?

 

공통 조상과 두 브랜치의 끝점,

총 3개의 점을 분석하여 자동으로 합쳐준다.

 

이것을 3-way merge라고 한다.

형상이 다른 브랜치를 병합할 때 사용한다.

 

그렇다면 반대로

idea 브랜치에서 아이디 중복체크가 완료되었을 때

main 브랜치에서 추가 작업을 하지 않아

두 브랜치의 형상이 같을 때는 어떻게 할까?

 

3-way merge가 필요가 없다.

 

그냥 아이디 중복체크 완료를 main으로

들고 오기만 하면 된다.

 

이때 fast-forward merge를 사용한다.

형상이 똑같을 때 사용한다.

 

 


 

fast-forward merge 실습

 

사실 새로운 브랜치를 만든다는 말이

새로운 가지가 만들어지는 게 아닌,

log를 가리키는 포인터가 생긴다는 말이다.

 

 

그리고 형상이 같을 때 merge 하기 위해선

포인터만 움직여주면 된다.

 

 

실습해보자.

touch 명령어를 사용하면 파일 생성이 가능하다.

2개의 파일을 만들고 2번의 commit을 진행하였다.

 

현재 브랜치가 master 브랜치에 있는 것을 확인하고

topic 브랜치를 생성해주었다.

 

그리고 다시 log를 확인해보니

master와 topic 포인터가 모두 로그인을 가리키는 것을 볼 수 있다.

 

그렇다면 브랜치를 topic으로 바꾸어

topic에서 작업을 해보자.

 

아이디 중복체크라는 새로운 파일을 만들고 log를 확인해보니

master는 로그인에, topic은 아이디 중복체크에 포인터가 향해있다.

 

 이후에 master로 브랜치를 바꾸면

아이디 중복체크 파일이 사라진다.

 

 

master에서 topic 브랜치를 merge 해주면

사라졌던 아이디 중복체크 파일이 합쳐져서 뿅 나타난다.

 

이게 fast-forward merge 방식이다.

 


3-way merge 실습

 

2개의 파일을 만들고 2번의 commit을 진행하였다.

 

 

브랜치를 만들고 체크아웃까지 한 번에 하라는 명령어가 있다.

git checkout -b topic

topic 브랜치가 생성되고 옮겨간다.

 

 

git branch를 해서 별이 찍혀있는곳이 헤더가 있는 곳이다.

헤더를 master 브랜치로 옮기려면

git checkout master 해준다.

 

헤더를 옮긴다는 것은 그쪽에서 작업을 하겠다는 말이다.

 

master 브랜치의 포인터는 글쓰기에 있음
                               checkout topic한 후 확인해보니                                  topic 브랜치의 포인터는 아이디중복체크에 있음

다시 checkout master 하여 돌아온다.

 

그러면 현재까지의 상황은 아래 그림과 같다.

git merge topic

master에서 merge를 진행해준다.

 

그러면 아래와 같은 화면이 뜰 것이다.

log를 어떻게 남길지 물어보는 창이다.

 

제일 윗줄에 노란 글자로 Merge branch 'topic'이라고 적혀있다.

저 문장으로 log를 남길까?

라고 물어보는 것이다.

 

이 창을 vi에디터라고 하는데

i를 눌리면 입력 모드로 바뀌어

log를 변경할 수 있지만

일단 그대로 저장해준다.

 

ESC 키를 눌러준 후

':' 콜론을 입력해준다.

그러면 명령 모드로 바뀐다.

 

그리고 wq를 입력하고 엔터를 쳐서 빠져나온다.

그냥 q만 입력하면 종료한다는 말이고,

wq는 저장한 후에 종료한다는 말이다.

 

merge해준 후 읽어보니 fast-forward merge라는 말이 보이지 않는다.

3-way merge가 된 것이다.

 

마지막으로 log를 확인해보자.

 

아이디 중복체크와 글쓰기가 잘 merge 된 것을 확인할 수 있다.

 

 

 

 

 

 

 

[출처]

 

 

https://inf.run/3Xiz

 

[무료] 지옥에서 온 관리자 Git - 인프런 | 강의

“소규모 협업을 통해 프로젝트 개발을 하고 싶은데 어떻게 해야 할지 모르겠어요!” “취업을 앞둔 취준생인데 Git을 몰라요!” 취준생, 주니어 개발자 등 프로그래머라면 꼭 알아야 하는 Git에

www.inflearn.com

 

반응형