git merge

정민교·2023년 6월 1일
0

git

목록 보기
6/22
post-thumbnail

✔️git merge

다른 브랜치를 현재 브랜치에 병합하는 것을 git merge 라고 합니다.

두 개의 브랜치가 존재합니다.

bugfix 브랜치는 master 브랜치에서 생성되어 두 개의 커밋을 진행한 상태입니다.

현재 bugfix 브랜치에서 작업한 결과가 만족스러워 master 브랜치에 병합하고 싶습니다.

📌병합 원칙

  1. 하나 혹은 두 개의 커밋만 골라서 합치는 것이 아닙니다.

bugfix 브랜치를 master 브랜치에 병합한다는 것은 bugfix 브랜치가 생성되어서 분기된 후 생긴 모든 커밋들을 master 브랜치에 추가한다는 개념과 같습니다.

  1. 현재 브랜치(HEAD가 가리키는 브랜치)에 병합합니다.

현재 우리가 있는 위치에 다른 브랜치에 있는 내용을 합치는 것입니다.

bugfix 브랜치에 작업한 내용을 master 브랜치에 합치고 싶다면, 우선 master 브랜치로 이동해야 합니다.

git switch master

그리고 나서 병합을 진행합니다. bugfix 브랜치에 있는 모든 커밋들을 master 브랜치로 합치는 것입니다.

git merge bugfix(브랜치 이름)

위는 실제로 구분하기 편하도록 색을 달리하고 위치도 나누어 분기된 것을 표현한 것입니다.

실제로는 아래와 같이 브랜치들은 특정 커밋을 가리킵니다.

📌fast forward merge

위 예시는 fast forward merge로 번역하자면 빨리감기 병합입니다.

두 번째 커밋을 기준으로 bugfix 브랜치가 생성되어 분기되었고 bugfix 브랜치에 두 개의 커밋이 추가로 생겼습니다.

반면 master 브랜치는 두 번째 커밋 이후 추가 커밋이 없습니다.

이럴 때 병합하는 가장 쉬운 방법은 master 브랜치를 네 번째 커밋으로 옮기는 방법입니다.

이로써 master 브랜치도 4개의 커밋을 갖게 되었습니다.

이 모습이 빨리 감기처럼 보여 fast forward merge라고 합니다.

모든 병합이 이런식으로 이루어지지는 않습니다. master 브랜치에 추가적인 커밋이 없었기 때문에 fast forward merge를 할 수 있던 것입니다.

📌병합 커밋 생성

다른 예시를 생각해봅시다.

이번에는 위와 같은 상황에서 추가로 matser 브랜치에 커밋이 하나 생긴 상황입니다.

마찬가지로 master 브랜치에다가 bugfix 브랜치에 존재하는 커밋들을 합치고 싶습니다.

하지만 이 경우에는 fast forward merge가 불가능 합니다.

이 전 상황에는 bugfix 브랜치에 존재하는 커밋을 master 브랜치만 몰랐습니다.

하지만 이번에는 master 브랜치에 bugfix 브랜치도 모르는 커밋이 있습니다.

이러한 경우에는 병합할 때 master 브랜치에 새로운 커밋을 생성합니다.

기본 커밋 메세지로는

merge branch bugfix

이렇게 커밋 메세지가 기본으로 써 있습니다. 커밋 메세지를 바꾸는 것은 자유지만 그냥 병합했다는 거 말고는 별 다른 상황이 없으니 저는 그냥 기본적으로 이 상태로 커밋을 생성합니다.

👉커밋 이력은 어떻게 될까?

git log 를 입력해 커밋 이력을 살펴보면 언제 커밋을 했는지 날짜도 있습니다.

fast forward merge는 간단히 master 브랜치가 가리키는 커밋을 이동시키면 되지만 fast forward merge가 가능하지 않은 경우는 병합 커밋을 새로 생성한다고 했습니다.

따라서 maseter 브랜치에 시간 순서대로 bugfix에 있던 커밋, master 브랜치에 있던 커밋이 생기고 추가로 병합 커밋도 마지막에 생성됩니다.

즉, 커밋이 생성된 시간 순서대로 master 브랜치에 주르륵 커밋이 생기게 됩니다.


🙏🙏🙏
git 시리즈에 작성한 포스팅은

https://www.udemy.com/course/best-git-github/
유데미 강좌
https://www.yes24.com/Product/Goods/110795446
모두의 깃 & 깃허브

위 내용을 참고하였으며, 제 실습화면을 캡쳐한 사진 외의

대부분의 사진들은 인터넷 강좌에서 제공하는 자료를 캡쳐하였습니다.

깃 시리즈 포스팅의 내용 및 사진을 절대로 상업적 목적으로 무단 복사하지 말아주세요.

profile
백엔드 개발자

0개의 댓글