Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Table of Contents


fast-forward 란 무엇인가?

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

fast-forward인 관계

    • 커밋 A의 히스토리 : X > A
    • 커밋 B의 히스토리 : X > A > Y > B

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

fast-forward가 아닌 관계


    • 커밋 A의 히스토리 : X > Y > A
    • 커밋 B의 히스토리 : X > Y > Z > B

...

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

Merge strategies

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

...

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



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

  • fast-forward의 관계라도 필히 머지 커밋을 생성 
  • non fast-forward 병합 을 실행하면, 브랜치가 그대로 남기 때문에 그 브랜치로 실행한 작업 확인 및 브랜치 관리 면에서 좋음 (변경 이력 모두 확인 가능)

...

  • master 브랜치에 Merge된 no-ff 브랜치 작업 히스토리 확인 가능
  • 필히 머지 커밋 생성


Master 브랜치 Commit


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

  • 처음 설명 확인 필요
  • fast-forward의 관계이면 머지 커밋이 생성 되지 않음
  • fast-forward의 관계가 아닐 때 머지 커밋을 생성

...

  • **fast-forward의 관계가 아닐 때 > 머지 커밋 생성 




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

  • fast-forward의 관계일 경우에만 머지 진행 ( 머지 커밋 생성되지 않음 )
  • fast-forward 관계가 아니면 머지가 진행 되지 않음



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

1) squash 브랜치 Commit 상태


2) master 브랜치 Commit 상태

...

  • 머지 시 squash브랜치 commit(test1,test2) 는 머지 커밋 1개로 합쳐서 master 머지 됨 



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

  • fast-forward의 관계일 경우에만 머지 진행 
  • fast-forward 관계가 아니면 머지가 진행 되지 않음


Rebase 란 무엇인가?

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

...

  • Rebase Merge 시 master 브랜치 



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

1) rebase_merge 브랜치 Commit 상태

...

  • master 브랜치 base : test3 + rebase_merge브랜치 내용 합쳐짐 (–no-ff 옵션으로 M 머지커밋 생성)



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

1) rebase_merge 브랜치 Commit 상태

...