목차 |
---|
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
...
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 상태
...