
merge의 2가지 방식Fastforward,3-way-merge
git에서 merge가 이뤄지는 방식은 Fastforward와 3-way-merge 2가지가 있다.
Fastforward, 3-way-merge방식의 특징은 다음과 같다.
Fastforward : 공통 커밋 조상이 있는 2개의 브랜치에서 한쪽 브랜치에만 이후 커밋이 발생할 때 병합을 위한 새 커밋을 만들지 않고 헤드의 위치만 변경3-way-merge : 기존의 merge방식과 흡사하게 두 브랜치의 공통 조상이 되는 커밋과 각 브랜치의 커밋을 대조하여 병합을 결정
Cherry-Pick은 다른 브랜치에서 원하는 커밋을 가져온다
Cherry-Pick은 타 브랜치들에서 필요한 커밋을 데리고올 때 사용한다.
이 때 가져온 커밋은 복사본이기 때문에 별개의 커밋이다.

기본적인 명령어 사용방법은 다음과 같다.
git cherry-pick (가져올 커밋의 해시)
Rebase --onto는 다른 브랜치에서 파생된 브랜치를 옮겨붙인다.
Rebase의 --onto옵션은 브랜치에서 생성된 자식 브렌치를 데리고올 수 있다.
이전 포스팅에서 확인한 Rebase는 자식 브렌치를 포함하여 부모 브렌치 전체를 가지고 온다.
그래서 부모 브렌치는 제외하고 자식 브렌치의 commit만을 가져와야 하는 상황에 사용된다.


기본적인 명령어 사용방법은 다음과 같다.
git rebase --onto (도착 브랜치) (출발 브랜치) (이동할 브랜치)
Merge --squash는 다른 커밋들을 하나로 묶어 가져온다.
Merge의 --squash옵션은 다른 브랜치의 가지 마디들을 하나로 묶어서 이동시킨다.
그래서 --squash옵션은 이동시킬 각각의 브랜치들을 기억할 필요가 없을 때 사용된다.

기본적인 명령어 사용방법은 다음과 같다.
git merge --squash (대상 브랜치)
Merge와 Merge --squash는 실행 후 코드의 상태는 같지만 내역에서 큰 차이가 있다.
Merge : A와 B 두 브랜치를 한 곳으로 이어붙인다.Merge --squash : B 브랜치의 마디들을 복사해 한 마디로 모아 staged 상태로 A 브랜치에 붙인다.
Gitflow는 협업을 위한 브랜칭 전략
Git-flow는 협업과정에서 브랜치를 효과적으로 활용할 수 있는 개발자간의 약속 즉 방법론이다.
Git-flow는 그대로 활용해도 되지만 프로젝트, 팀의 성격...등등 개발 환경에 맞게 수정하고 변형해서 사용해도 된다.

Git-flow는 feature, develop, release, hotfix, master 5가지의 브랜치를 사용한다.
각각의 브랜치들의 용도는 다음과 같다.
| 브랜치 | 용도 |
|---|---|
main | 제품 출시/배포 |
develop | 다음 출시/배포를 위한 개발 진행 |
release | 출시/배포 전 테스트 진행(QA) |
feature | 기능 개발 |
hotfix | 긴급한 버그 수정 |