fast-forward 란 무엇인가?

2개의 커밋 A와 B가 있을때에 커밋A에 따른 히스토리가 커밋B에 따른 히스토리에 전부 포함되어 있는 경우
2개의 커밋은 fast-forward관계이다 or 커밋A는 커밋B에 fast-forward한다라고 말한다.

fast-forward인 관계

     커밋B의 히스토리에 커밋A의 히스토리가 모두 포함되어 있다.

fast-forward가 아닌 관계


     커밋B의 히스토리에 커밋A의 히스토리가 포함되어 있지 않다.(A의 커밋이 포함되어 있지 않다.)


*참고페이지 : http://blog.naver.com/PostView.nhn?blogId=parkjy76&logNo=220308638231&categoryNo=73&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

Merge strategies

프로젝트,저장소 에서 Merge 정책을 설정 

설정 > Merge strategies >  ON/OFF, Default Merge 정책 설정 가능 


옵션1. --no-ff ( non-fast-forward )

머지 작업 시 필히 머지 커밋을 생성하여 브랜치가 있었다는 정보가 남는다.

옵션2. --ff ( fast-forward )

로그가 하나로 되어 브랜치가 있었다는 정보가 없어진다.

브랜치의 존재를 로그에 남길 필요가 없어 그대로 커밋해도 문제가 없는 경우에 사용.

옵션3. --squash
브랜치가 있었다는 정보 커밋 로그가 모두 남지 않는다.
브랜치에서 행한 작업이 작아 1커밋으로 정리해버려도 문제가 없는 경우 사용.



1.Merge commit (옵션 : --no-ff)

1) no-ff 브랜치 Commit 상태

2) master 브랜치 Commit 상태

3) --no-ff 옵션으로 Merge 진행


Master 브랜치 Commit


2.Merge commit (옵션 : --ff)


1) fast-forward 브랜치 Commit 상태


2) master 브랜치 Commit 상태


3) --ff 옵션으로 Merge 진행





3.Merge commit (옵션 : --ff-only)



4.Merge commit (옵션 : --squash )

1) squash 브랜치 Commit 상태


2) master 브랜치 Commit 상태


3)Master 브랜치 Commit



5.Merge commit (옵션 : --squash --ff-only)


Rebase 란 무엇인가?

두 브랜치를 합치는 두 번째 방법인 Rebase는 Merge와는 다르게 이름 그대로 브랜치의 공통 조상이 되는 base를 다른 브랜치의 커밋 지점으로 바꾸는 것입니다.

Master 현재 위치가 base가 되고 뒤에 Feature브랜치 Commit이 저장 





6.Merge commit (옵션 : rebase + merge --no-ff)

1) rebase_merge 브랜치 Commit 상태

2) master 브랜치 Commit 상태


3) rebase + merge --no-ff 옵션으로 Merge 진행



7.Merge commit (옵션 : rebase + merge --ff-only)

1) rebase_merge 브랜치 Commit 상태

2) master 브랜치 Commit 상태


3) rebase + merge --ff-only 옵션으로 Merge 진행