본문 바로가기
Knowledge/Tools & Command

[GIT] 병합(merge) 종류 별 완벽 설명

by 미네마네모 2019. 11. 27.

조금 더 케이스를 상세하게 다시 포스팅 해보았습니다

https://minemanemo.tistory.com/157

 

[Git] merge와 rebase - (1) 주요 개념 및 예시

목차 목차 🤓 개요 🥶 중요 개념: Fast-Forward 관계란? 🥸 merge와 rebase의 기본 개념 및 차이 😇 merge, rebase 사용 케이스 1. Fast-Forward 관계에서 merge 2. Fast-Forward 관계에서 rebase 3. Fast-Forward..

minemanemo.tistory.com


사전에 알면 좋은 용어

  • fast-forward 관계
현 브랜치 /
병합할 브랜치
Fast-Forward 관계 O Fast-Forward 관계 X
설명 Merge 커밋을 남기지 않고 병합 가능하다.
충돌 없이 앞선 커밋을 따라갈 수 있다.

실질적으로 앞선 커밋을 병합하는 느낍보다
따라간다라는 느낌이다.

즉, Fast-Foward 관계란 앞선 커밋을 충돌 없이 따라갈 수 있는 관계를 말한다.

(여기서의 충돌은 일반적인 conflict가 아닙니다. 이해를 돕기 위해 충돌 이라고 기술하였음.)
Merge 커밋을 남겨야 병합 가능하다.



Fast-Forward와 반대로 충돌 없이 따라갈 수 없는 관계를 말한다.


병합을 위해 아래와 같이 Merge 커밋을 남겨야한다.
도식

 

병합(merge)의 종류 

1. 보통의 병합 (--ff)
2. 이기적 병합 (--no-ff)
3. 소심한 병합 (--ff-only)
4. 양아치 병합 (--squash)

* 용어는 이해를 돕기위해 제가 만들었어요..ㅎㅎ;;;

 

보통의 병합

$ git merge {병합할 브랜치 명}

보통의 병합이라고 할지 융통성 있는 병합이라고 할지 고민했는데 기본적인 명령어라서 보통의 병합이라고 하였다.

융통성 있는 병합이라고 표현한 이유는 다음과 같다.

 

  • 현 브랜치와 병합할 브랜치가 Fast-Forward 관계 O: 병할할 브랜치(커밋)을 따라감. without Merge 커밋
  • 현 브랜치와 병합할 브랜치가 Fast-Forward 관계 X : 병합할 브랜치와 병합됨. with Merge 커밋

이기적인 병합

$ git merge --no-ff {병합할 브랜치 명}

현재 브랜치와 병합 대상의 관계가 Fast-Forward이던 아니던 무조건 Merge 커밋과 같이 병합되는 옵션

 

소심한 병합

$ git merge --ff-only {병합할 브랜치 명}

현재 브랜치와 병합 대상의 관계가 Fast-Forward인 경우에만 병합 진행. Merge 커밋 생성되지 않음

 

양아치 병합

$ git merge --squash {병합할 브랜치 명}

현재 브랜치에 병합 대상과의 차이나는 commit을 하나로 합쳐서 커밋함

 

 


참고 : http://blog.naver.com/PostView.nhn?blogId=parkjy76&logNo=220308638231&categoryNo=73&parentCategoryNo=0&viewDate=¤tPage=1&postListTopCurrentPage=1&from=postView

 

이미지 출처 : https://stackoverflow.com/questions/34019195/git-pull-doesn-t-fast-forward-merge-even-though-there-are-no-conflicts

 

 

댓글