[Git] Git Merge 개념

Wonhyun Kwon·2023년 5월 16일
0

Git

목록 보기
4/5
post-thumbnail

1. Git merge 란?

  • git branch 를 다른 branch 로 합치는 과정을 -merge 라 한다.
  • merge 의 기본 단위는 branch 이며, git merge 명령어로는 commit 단위로 합치기가 불가능하다.

🧑‍💻 명령어

$ git switch {현재 브랜치}
$ git merge {대상 브랜치}

2. Merge 전략

❗️merge strategy는 다양하지만 특수성이 강한 전략이 많기에 이 글에선 제일 기본적인 fast-forward-merge 내용만 다룬다.

1) Fast Forward Merge

  • 가장 기본적인 merge 종류
  • 현재 branchHEAD가 대상 branchHEAD 까지 옮기는 merge 방식

✏️ 예제
다음과 같은 git log 가 있다.
feature-view 브랜치의 HEAD 는 세 번째 commit 에 있고, main 브랜치의 HEAD 는 두 번째 commit 에 있는 상황이다.

commit 7d22697cd209462e764fb84ecb9a02fe96648d1d (HEAD -> feature-view, origin/feature-view)
Author: 
Date:   Tue May 16 13:12:48 2023 +0900

    third

commit c05e3e58c16da0058e716ebbf396def9a95d6c81 (origin/main, origin/HEAD, main)
Author: 
Date:   Fri May 12 16:32:37 2023 +0900

    second

commit 5369298a0a2fd78382cc72422b82e3170e27db4c
Author: 
Date:   Fri May 12 16:29:47 2023 +0900

    first

그림으로 표현하면 다음과 같다.
Fast-Forward-Merge

📄 결과
우리가 할 것은, mainHEADfeature-viewHEAD 로 옮기는 것이다.

# main 브랜치로 변경
$ git switch main

# main 브랜치에서 대상 브랜치의 작업물을 merge (대상 브랜치의 HEAD로 옮기기)
$ git merge feature-view

git log 결과는 다음과 같다.

commit 7d22697cd209462e764fb84ecb9a02fe96648d1d (HEAD -> main, origin/feature-view, feature-view)
Author: 
Date:   Tue May 16 13:12:48 2023 +0900

    third

commit c05e3e58c16da0058e716ebbf396def9a95d6c81 (origin/main, origin/HEAD)
Author: 
Date:   Fri May 12 16:32:37 2023 +0900

    second

commit 5369298a0a2fd78382cc72422b82e3170e27db4c
Author: KwonWonHyun <whkwon@keypair.co.kr>
Date:   

    first

세 번째 commitmain 브랜치의 HEAD 가 옮겨진 것을 확인할 수 있다.

그림으로 표현하면 다음과 같다.

🔔 참고
fast-forward-merge 는 중간에 변경이 없을 때만 작동한다.

아래 그림을 보면 알듯이, 만약에 중간에 다른 commit 이 껴있고, 해당 commit 이 같은 부분을 수정했다면, conflict 가 일어나 제대로 merge 가 되지 않는다.

이를 해결하기 위해 merge commit 을 사용하여 제어한다.
일단 merge 가 끝나면 git statusboth modified 라는 상태로 변경되며, conflict 가 발생한 파일에 다음과 같이 생겨난다.

<<<<<<<< HEAD
현재 브랜치의 변경 사항
========
>>>>>>>> feature-layout
merge 대상 브랜치의 변경 사항

이 두 개의 변경 사항 중 하나를 택해야 한다.
<<<<<<<<, ========, >>>>>>>> 를 모두 제거 한 후 둘 중 하나를 반영하거나 혹은 vscode 기준 버튼으로 제공해준다.

다시 해당 파일을 git add 한 후 git commit 하게 되면 merge commit 이 완성된다.

그림으로 표현하자면 다음과 같다.

profile
모든 사용자가 만족하는 UI를 만드는 FE 개발자 권원현입니다.

0개의 댓글