제육's 휘발성 코딩
반응형

Git Branch 심화

Git merge 전략

image

  • Git 에서 merge가 이뤄지는 방식은 Fastforward3-way-merge가 있다.

Fastforward

두 가지 브랜치가 있을 때, 하나가 다른 하나의 조상인 경우일 때 조상이 자식으로 HEAD만 옮겨갈 때를 의미한다.

즉, 이미 공통된 부분이며, 한 곳에서만 변경이 발생했기 때문에 굳이 별도의 커밋을 할 필요 없이 하나의 브랜치로(B) 만든 후 조상(A) 브랜치를 삭제한다.

해당 부분의 단점으론 어느 부분에서 병합했는 지 기록이 남지 않기 때문에 보기 어려울 수 있다.

만약 새로운 커밋 기록을 남기고 싶다면 git merge --no-ff (브랜치명) 을 사용하면 Fastforward 방식에서 새로운 커밋을 남길 수 있다.

3-way-merge

두 브랜치의 병합을 봤을 때 한 곳만 변경사항이 존재, 두 곳 모두 변경사항이 존재 하는 등의 경우가 있을 것이다.

이 경우 상황을 판단하기 위해 두 브랜치의 공통된 조상, A, B 브랜치 해서 총 3가지를 확인한다는 의미에서 3-way-merge 방식으로 불리운다.

다른 브랜치에서 특정 커밋 가져오기

image

git cherry-pick (체리의 해시)
  • main 브랜치에서 실행

image

  • merge 와 rebase와 달리 특정 커밋만 가져올 수 있는 기능이다.

다른 브랜치에서 브랜치를 가져오기

git rebase --onto (도착 브랜치) (출발 브랜치) (이동할 브랜치)

image

  • citrus 브랜치만 메인 브랜치에 옮기고 싶은 경우 (git rebase --onto main fruit citrus)
  • main 브랜치의 HEAD와 맞추기 위해 git switch maingit merge citrus 를 하여 Fastforward를 진행하자.

다른 브랜치의 마디들을 묶어서 가져오기

image

git merge --squash (대상 브랜치)
  • 원하는 브랜치를 스쿼시 하여 가져올 수 있다. 명령어를 사용하면 해당 관련 커밋들이 스테이징된 상태로 가져오며, 원하는 커밋 메시지를 작성하여 붙일 수 있다.

협업을 위한 브랜치 활용법

image

협업을 위한 브랜칭 전략을 Gitflow라고 한다. https://nvie.com/posts/a-successful-git-branching-model/ 를 참고하면 상세한 설명을 볼 수 있다.

 


본 포스팅은 '인프런 - 제대로 파는 Git & GitHub - by 얄코' 강의를 보고 정리한 내용입니다.

반응형
profile

제육's 휘발성 코딩

@sasca37

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 맞구독은 언제나 환영입니다^^