반응형
Git Branch 심화
Git merge 전략
- Git 에서
merge
가 이뤄지는 방식은Fastforward
와3-way-merge
가 있다.
Fastforward
두 가지 브랜치가 있을 때, 하나가 다른 하나의 조상인 경우일 때 조상이 자식으로 HEAD만 옮겨갈 때를 의미한다.
즉, 이미 공통된 부분이며, 한 곳에서만 변경이 발생했기 때문에 굳이 별도의 커밋을 할 필요 없이 하나의 브랜치로(B) 만든 후 조상(A) 브랜치를 삭제한다.
해당 부분의 단점으론 어느 부분에서 병합했는 지 기록이 남지 않기 때문에 보기 어려울 수 있다.
만약 새로운 커밋 기록을 남기고 싶다면 git merge --no-ff (브랜치명)
을 사용하면 Fastforward 방식에서 새로운 커밋을 남길 수 있다.
3-way-merge
두 브랜치의 병합을 봤을 때 한 곳만 변경사항이 존재, 두 곳 모두 변경사항이 존재 하는 등의 경우가 있을 것이다.
이 경우 상황을 판단하기 위해 두 브랜치의 공통된 조상, A, B 브랜치 해서 총 3가지를 확인한다는 의미에서 3-way-merge
방식으로 불리운다.
다른 브랜치에서 특정 커밋 가져오기
git cherry-pick (체리의 해시)
- main 브랜치에서 실행
- merge 와 rebase와 달리 특정 커밋만 가져올 수 있는 기능이다.
다른 브랜치에서 브랜치를 가져오기
git rebase --onto (도착 브랜치) (출발 브랜치) (이동할 브랜치)
- citrus 브랜치만 메인 브랜치에 옮기고 싶은 경우 (
git rebase --onto main fruit citrus
) - main 브랜치의 HEAD와 맞추기 위해
git switch main
후git merge citrus
를 하여Fastforward
를 진행하자.
다른 브랜치의 마디들을 묶어서 가져오기
git merge --squash (대상 브랜치)
- 원하는 브랜치를 스쿼시 하여 가져올 수 있다. 명령어를 사용하면 해당 관련 커밋들이 스테이징된 상태로 가져오며, 원하는 커밋 메시지를 작성하여 붙일 수 있다.
협업을 위한 브랜치 활용법
협업을 위한 브랜칭 전략을 Gitflow라고 한다. https://nvie.com/posts/a-successful-git-branching-model/ 를 참고하면 상세한 설명을 볼 수 있다.
본 포스팅은 '인프런 - 제대로 파는 Git & GitHub - by 얄코' 강의를 보고 정리한 내용입니다.
반응형