[git] Rebase, Squash

김은지·2022년 3월 21일
0

학습 내용 정리

목록 보기
11/25

리베이스

git_rebase

일단 단어 그대로 생각해본다면
branch의 base(branch의 시작점)를 재설정 한다는 뜻으로
rebase는 base에서 branch를 떼어 rebase하는 시점의 base(base가 되는 브랜치의 끝)에 붙인다고 생각하면 이해하기 편한 것 같다.

rebase와 merge(squash) : 히스토리를 통한 비교

깃의 커밋 히스토리를 관리하는 관점에서 보면 비교가 쉽다.

git merge
Merge는 merge 시점에서 부모 브랜치에 새로운 커밋포인트를 생성한다.

![git_squash]https://image.toast.com/aaaadh/real/2017/techblog/Screen%20Shot%2020170529%20at%2012.15.51%20PM.png

  • 출처
    squash는 a,b,c를 합쳐서 하나의 새로운 커밋으로 만드는 것을 뜻한다.

무척 헷갈리지만 위의 내가 본 글에 따르면

  • merge의 경우 init->a->b->c->m 이라는 구조를 만들고 이 구조가 모두 히스토리에 남는다.
  • squash and Merge는 커밋 'a,b,c' 는 init만을 부모로 가진 단일 커밋이고, 작업했던 브랜치의 커밋 a, b, c는 머지 후의 메인 브렌치 커밋 init, 'a,b,c'와 아무런 연관을 가지지 않는다.

git_rebase

  • Rebase and Merge : 커밋 a, b, c 의 관계는 그대로 유지한 채, 메인 브렌치에 그대로 추가하는 것이다.(그래서 가지를 떼어다 붙였다고 설명하는 것 이었다!!!!! 이제야 납득...) 커밋 a는 부모로 커밋 e를 가지고, Rebase and Merge 작업 후에는, 작업했던 브렌치의 a, b, c 커밋들은 머지 후의 메인 브렌치의 Init, d, e, a, b, c 커밋들과 연관 관계를 가지지 않는다.

출처

위의 출처에 매우 상세하게 설명되어 있다.

휴...
나를 위한 메모

  • git rebase 중, 충돌이 발생하면 충돌을 수정하고, add 명령어를 통해 스테이징만 해주면 된다.
  • 진행되고 있는 rebase를 멈추고 되돌리고 싶다면 rebase --abort 이어서 진행하고 싶으면 --continue 옵션을 입력하면 된다.

0개의 댓글