본문 바로가기
코드잇 스프린트 4기/위클리 페이퍼

[Git] 머지(merge)

by devwqc 2024. 1. 12.

코드잇 스프린트 4기
3주 차 위클리 페이퍼

머지(merge)

머지(merge)는 서로 다른 브랜치의 작업 내용을 합칠 때 사용한다.

1. 활용

1) 머지(merge) 하기

feature/intro-header 브랜치에서 feature/intro-bottom 브랜치의 내용을 합친다고 가정.

  • 반영이 되고자 하는 브랜치로 이동.
    git checkout feature/intro-header
  • 작업 내용을 가져올 브랜치를 merge한다.
    git merge feature/intro-bottom

2) 충돌(conflict)

많은 상황에서 merge할 때 conflict가 발생한다.
conflict를 해결하고 merge를 진행하는 방법과 일단 merge를 취소하는 방법이 있다.

(1) 충돌(conflict) 해결하기

merge를 진행하면 conflict가 발생하는 파일을 알려준다.

$ git merge feature/intro-bottom
Auto-merging intro.js
CONFLICT (add/add): Merge conflict in intro.js
Automatic merge failed; fix conflicts and then commit the result.

해당 파일로 이동하면 conflict가 발생한 부분을 표시해준다.

$ cat intro.js
<<<<<<< HEAD
console.log('header');
=======
console.log('bottom');
>>>>>>> feature/intro-bottom

conflict를 해결 후 commit을 진행하면 된다.

$ cat intro.js
console.log('header');
console.log('bottom');

git add intro.js
git commit

(2) 머지(merge) 취소하기

당장 conflict를 해결하지 않고 넘어가려면 merge를 중단하면 된다.
git merge --abort

2. 종류

1) Fast-Forward merge

merge하려는 두 브랜치가 같은 커밋 히스토리 선(line) 상에 있을 때 이루어짐.
새로운 커밋이 생기지 않고 단지 브랜치가 이동.

2) Three-way merge

merge하려는 두 브랜치가 공통된 조상(base) 브랜치를 기점으로 분기했을 때 이루어짐.
merge 커밋이 생성됨.

(1) 머지(merge) 반영

공통된 조상(base) 브랜치의 내용과 비교했을 때 달라진 부분을 우선으로 반영.

경우 base my(feature/intro-header) other(feature/intro-bottom) 머지 결과
case1 A A B -> B
case2 1 1 2 -> 2
case3 "hello" (공백) "hello" -> (공백)
case4 "bye" "fighting" "please" -> conflict

감사합니다.


참고 자료
https://www.atlassian.com/ko/git/tutorials/using-branches/git-merge

댓글