Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

나의 지식 보관소

Git Merge(병합) 본문

Git

Git Merge(병합)

야식은진리다 2020. 4. 26. 19:52

Fast Forward 병합

먼저 다음과 같은 프로젝트가 있다고 가정해보자.

이 프로젝트에서 발생한 이슈를 해결하기 위해, 이 이슈에 집중할 수 있는 브랜치를 새로 만든다.

브랜치를 만들면서 checkout 까지 한 번에 하려면 $ git checkout 명령에 -b 옵션을 추가하면 된다.

 

따라서 $ git checkout -b issue 명령을 실행하면 아래와 같은 상태가 된다.

또한 issue 브랜치로 checkout 했기 때문에 HEAD는 issue브랜치를 가리키는 상태이다. 그러므로 뭔가 작업을 하고 커밋을 하면 issue 브랜치가 앞으로 나아간다.

만일 이상태에서 중요한 문제가 발생해서 현재 작업을 중단하고 즉시 문제를 해결해야 할 상태가 되면, 다른 복잡한 과정 없이 master 브랜치로 돌아가기만 하면 된다. 단, 아직 커밋하지 않은 파일이 Checkout 할 브랜치와 충돌이 나면 브랜치를 변경할 수 없으므로, 브랜치를 변경할 때는 워킹 디렉터리를 정리하는 것이 좋다.

 

이제 $ git checkout master 를 통해 브랜치를 변경하게 되면 워킹 디렉터리는 issue를 시작하기 이전 모습으로 되돌려지므로 새로 발생한 중요한 문제에 집중할 수 있는 상태가 된다.

 

이젠 해결해야할 핫픽스를 해결하는 경우를 살펴보자, master 브랜치로 돌아와서

$ git checkout -b Hotfix 명령을 통해 hotfix라는 새로운 브랜치를 만든 다음, 문제를 해결하고 커밋을 하면 아래와 같은 상태가 된다.

이후 핫픽스에서 해결해야 할 문제를 모두 해결하고 master브랜치와 hotfix브랜치를 합치려고 한다면 다음 명령을 통해 할 수 있다.

$ git checkout master

$ git merge Hotfix

이때  5번 커밋은 3번커밋에 기반한 것이기 때문에 별다른 Merge 과정 없이 그저 master 브랜치가 Hotfix가 가리키는 커밋으로 이동한다. 이러한 Merge 방식을 "Fast forward"라고 부른다.

 

그리고 이제 Hotfix 브랜치는 필요가 없으므로 git branch 명령에 -d 옵션을 주어 삭제할 수 있다.

$git branch -d Hotfix

 

3-way 병합

fast forward때와 달리 현재 브랜치가 병합될 브랜치의 조상이 아닐경우 Git은 각 브랜치가 가리키는 커밋 두 개와 공통조상 하나를 이용해서 3-way merge라는 방식을 사용한다.

위 상태에서 master 브랜치에서 issue를 merge하게 되면 브랜치 포인터를 issue브랜치가 가리키는 커밋으로 옮기는 게 아니라 3-way merge의 결과로 별도의 새로운 커밋을 만들어내고, 이것을 merge 커밋이라 부른다.

 

$ git checkout master

$ git merge issue

'Git' 카테고리의 다른 글

Git 충돌(conflict) / vscode를 병합(merge)도구로 사용하기  (0) 2020.04.29
3-way merge  (0) 2020.04.27
Git 브랜치  (0) 2020.04.26
Git Alias(사용자 지정 명령)  (0) 2020.04.26
Git 태그 ( Tag )  (0) 2020.04.25