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 | 긴급한 버그 수정 |