-
[git] merge (브랜치를 합쳐보자.)git 2022. 7. 2. 15:21
안녕하세요. gaki 입니다.
오늘은 git 에서 브랜치들끼리 합칠때 사용되는 merge 와 rebase 에 관하여 알아보겠습니다.
<목차>
1. merge
2. rebase
sourcetree 라는 앱을 사용해서 브랜치의 분기를 살펴보겠습니다.
1. merge
merge 는 브랜치들끼리의 내용을 합칠때 사용됩니다.
먼저, master 브랜치에서부터 시작하겠습니다.
master 브랜치에는 현재 readme.md 파일만 있습니다.
실제 개발 상황을 가정하고 브랜치를 분기해보겠습니다.
"각" 이라는 사람은 gak 라는 브랜치를 만들것이고,
"우" 라는 사람은 u 라는 브랜치를 만들것입니다.
현재 master 브랜치와, u, gak 이라는 총 3개의 브랜치가 있습니다.
gak 이라는 사람은 navbar 를 만드는 업무를 하기때문에 navbar.js 라는 파일을 만들것이고,
u 는 button 을 만드는 업무를 하기 때문에 button.js 라는 파일을 만든다고 가정하겠습니다.
이렇게 각각의 파일을 만들고 커밋을 하게 되면 현재 tree 는 다음과 같이 형성됩니다.
이제 남은 일은 master 브랜치에 gak 브랜치와 u 브랜치를 병합하는 것입니다.
먼저 gak 브랜치와 master 브랜치를 병합해보겠습니다.
그림과 같이 성공적으로 병합이 되었습니다.
즉, master 브랜치에 gak 이 작업한 navbar 내용이 병합되어있습니다.
이제, master 브랜치에 u 가 작업한 button 을 병합해보겠습니다.
master 브랜치에 u 가 작업한 내용과 gak 이 작업한 내용이 병합되었습니다.
이런식으로 병합이 완료되었습니다.
그럼 만약에 gak 이 작업한 navbar.js라는 파일을 u 도 동시에 작업해서 두 파일의 병합중 충돌이 생기면 어떻게 할까요?
다시한번 초기 상태로 돌아가보겠습니다.
master 브랜치에는 readme.rm 파일만 담겨있고, 존재하는 브랜치는 오직 master 밖에 없습니다.
gak 브랜치와 u 브랜치를 만들고, gak 은 아까와 같이 navbar.js 파일을 만들었습니다.
u 는 아까와 같이 button.js 파일을 만들고, 추가로 navbar.js 파일을 만들었습니다.
이제 master 에 gak 과 u 를 병합해보겠습니다.
먼저 master 와 u 을 병합하겠습니다.
다음으로 master 에 gak 을 병합하겠습니다.
이때 충돌에러가 발생할것입니다. 왜냐면 gak 에 있는 navbar 와 master 에 있는 navbar 가 충돌날것이기 때문이죠.
예상대로 충돌이 발생했습니다.
충돌한 Navbar.js 파일을 열어서 gak 이 짠 코드를 남기고, u 가 짠 navbar.js 코드를 지워줍니다.
그다음, 커밋을 하면 다음과 같이 정상적으로 합쳐졌습니다.
내용이 너무길어 rebase 에 관한 내용은 다음 글에서 이어서 쓰도록 하겠습니다.
'git' 카테고리의 다른 글
커밋하지 않은 상태에서 다른 branch 로 checkout 시 발생하는 상황 (0) 2022.07.08 [git] rebase (커밋 로그를 직렬으로 만들어보자) (0) 2022.07.02