(git & GitHub) Go deeper than Branch

Mirrer·2022년 5월 10일
0

git & GitHub

목록 보기
10/15
post-thumbnail

Fastforward & 3-way merge

merge의 2가지 방식 Fastforward, 3-way-merge

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


Fastforward, 3-way-merge방식의 특징은 다음과 같다.

  • Fastforward : 공통 커밋 조상이 있는 2개의 브랜치에서 한쪽 브랜치에만 이후 커밋이 발생할 때 병합을 위한 새 커밋을 만들지 않고 헤드의 위치만 변경
  • 3-way-merge : 기존의 merge방식과 흡사하게 두 브랜치의 공통 조상이 되는 커밋과 각 브랜치의 커밋을 대조하여 병합을 결정


Cherry-Pick

Cherry-Pick은 다른 브랜치에서 원하는 커밋을 가져온다

Cherry-Pick은 타 브랜치들에서 필요한 커밋을 데리고올 때 사용한다.

이 때 가져온 커밋은 복사본이기 때문에 별개의 커밋이다.

기본적인 명령어 사용방법은 다음과 같다.

git cherry-pick (가져올 커밋의 해시)

Rebase --onto

Rebase --onto는 다른 브랜치에서 파생된 브랜치를 옮겨붙인다.

Rebase--onto옵션은 브랜치에서 생성된 자식 브렌치를 데리고올 수 있다.

이전 포스팅에서 확인한 Rebase자식 브렌치를 포함하여 부모 브렌치 전체를 가지고 온다.

그래서 부모 브렌치는 제외하고 자식 브렌치의 commit을 가져와야 하는 상황에 사용된다.

기본적인 명령어 사용방법은 다음과 같다.

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

Merge --squash

Merge --squash는 다른 커밋들을 하나로 묶어 가져온다.

Merge--squash옵션은 다른 브랜치의 가지 마디들을 하나로 묶어서 이동시킨다.

그래서 --squash옵션은 이동시킬 각각의 브랜치들을 기억할 필요가 없을 때 사용된다.

기본적인 명령어 사용방법은 다음과 같다.

git merge --squash (대상 브랜치)

Merge & Merge --squash의 차이점

MergeMerge --squash는 실행 후 코드의 상태는 같지만 내역에서 큰 차이가 있다.

  • Merge : A와 B 두 브랜치를 한 곳으로 이어붙인다.
  • Merge --squash : B 브랜치의 마디들을 복사해 한 마디로 모아 staged 상태로 A 브랜치에 붙인다.

Gitflow

Gitflow는 협업을 위한 브랜칭 전략

Git-flow는 협업과정에서 브랜치를 효과적으로 활용할 수 있는 개발자간의 약속 즉 방법론이다.

Git-flow는 그대로 활용해도 되지만 프로젝트, 팀의 성격...등등 개발 환경에 맞게 수정하고 변형해서 사용해도 된다.


Git-flow에서 사용되는 브랜치

Git-flowfeature, develop, release, hotfix, master 5가지의 브랜치를 사용한다.

각각의 브랜치들의 용도는 다음과 같다.


브랜치용도
main제품 출시/배포
develop다음 출시/배포를 위한 개발 진행
release출시/배포 전 테스트 진행(QA)
feature기능 개발
hotfix긴급한 버그 수정

참고 자료

Book - Git
Do it! 지옥에서 온 문서 관리자 깃 & 깃허브 입문

profile
memories Of A front-end web developer

0개의 댓글