git rebase 전략

2024. 2. 21. 10:46· DEV
목차
  1. merge
  2. squash
  3. rebase
  4. 언제 어떤 전략을 써야할까?
  5. Reference

우리 회사에서는 git rebase 전략을 사용한다. 무슨 전략인지, 이것을 왜 사용하는지 알아보고자 한다.

merge

merge는 하나의 브랜치와 다른 브랜치의 변경 이력 전체를 합치는 방법이다.

commit a, b, c를 refer하는 m이 생성되고 m을 통해 a + b + c가 master에 추가된다.

merge한 경우

github에서는 기본적으로 merge로 병합시키도록 한다.

$ git checkout master
$ git merge my-branch

 

squash

commit a + b + c를 합쳐서 새로운 commit, abc를 만들어지고 master에 추가된다.

commit a + b + c를 합쳐서 새로운 commit, abc를 만들어지고 master에 추가된다. abc는 1개의 parent를 가진다. feature 브랜치의 commit history를 합쳐서 깔끔하게 만들기 위해 사용한다.

sqash로 merge한 경우

이전에 내가 작성했던 커밋이 하위로 들어가게 된다.

squash로 merge하려고 한다면, 다음 버튼을 누르고 merge하면 된다.

$ git checkout master
$ git merge --squash my-branch
$ git commit -m "your-commit-message"

rebase

모든 커밋이 합쳐지지 않고 각각 root 브랜치에 추가된다.

Merge는 Merge commit 기록이 추가로 남게 되지만 Rebase의 경우에는 branch 병합 시 Merge commit 기록이 남지 않는다. 따라서 마치 하나의 브랜치에서 작업한 것처럼 보여진다.

$ git checkout my-branch
$ git rebase master
$ git checkout master
$ git merge my-branch

언제 어떤 전략을 써야할까?

[번역] merge vs rebase vs squash

 

[번역] merge vs rebase vs squash

PR을 병합하는 방법에는 merge, rebase, 그리고 squash가 있는데요, 이에 대한 Mitchell Hashimoto의 개인적인 의견을 담고 있는 짧은 글입니다.

velog.io

위 레퍼런스에서는 각 전략마다 어떠한 특징이 있는지 정리한다. 해당 글에서는 각각의 전략마다 장점이 있고 상황에 따라 어떤 것을 사용하는게 좋은지 달라진다고 한다.


squash는 커밋이 합쳐져서 병합이 되기 때문에, 버그가 발생하면 해당 정보를 찾기 어렵다고 한다.

그러면 "아하, 여기에 버그가 있구나" 하고 바로 알 수 있죠. 스쿼시는 이 정보를 파괴합니다. 매일 하나씩 스쿼시 하기보다 저는 차라리 매일 1000개의 +50/-50 커밋을 머지하겠습니다.

커밋간 단위가 작고, 모두가 하나의 목표를 향하는 경우에는 스쿼시를 사용한다고 한다. 모두가 하나의 작업을 분담해서 한다면 squash를 통해 커밋이 이어져 보일 수 있기 때문이다.

PR에 수많은 작은 "WIP" "WIP" "WIP" 커밋이 있지만 총 diff가 작고 모두가 하나의 목표를 향하는 경우에는 스쿼시(squash)를 사용합니다.

주의할 점은 스쿼시를 할 때 커밋메세지에 충분한 설명을 담을 수 있도록 하는 것이다. 여러 작업이 뭉쳐있기 떄문이다.

저는 스쿼시를 하며 커밋 메세지를 다시 작성할 때 메세지에 충분히 설명이 담기도록 주의합니다. Git과 GitHub에서 자동으로 생성되는 기본 스쿼시 커밋 메세지는 좋지 않습니다.


회사에서는 rebase 전략에 모든 작업이 한 커밋으로 나갈 수 있도록 한다. 작업 단위가 크기 때문에 버그가 발생할 때 한 커밋만 revert하기 위함이다. 만약 한 feature에서 17개 commit을 만들고, main에 올라갔다고 하자.

만약 버그가 발생하면 17개 커밋 중 어떠한 커밋을 revert 해야하는지 찾기 어려울 것이다. 그렇기 때문에 작업의 흐름을 잘 파악하고, 커밋 관리가 쉽도록 rebase 전략을 사용하는 것 같다.

Reference

[GIT] Merge vs Rebase 차이

[Git] Merge 이해하기 (Merge / Squash and Merge / Rebase and Merge)

'DEV' 카테고리의 다른 글

Shadcn/ui가 무엇이고, 왜 사용할까?  (0) 2024.02.21
JavaScript IIFE란?  (0) 2024.01.02
Git 왜 쓰는거야?  (1) 2024.01.02
Debounce vs Throttle  (1) 2024.01.02
PNPM으로 모노레포 구축하기  (0) 2024.01.02
  1. merge
  2. squash
  3. rebase
  4. 언제 어떤 전략을 써야할까?
  5. Reference
'DEV' 카테고리의 다른 글
  • Shadcn/ui가 무엇이고, 왜 사용할까?
  • JavaScript IIFE란?
  • Git 왜 쓰는거야?
  • Debounce vs Throttle
너구리온
너구리온
너구리 프론트엔드 개발자의 블로그
너구리온
시온로그
너구리온
전체
오늘
어제
  • 전체보기 (27)
    • Blog (3)
    • DEV (8)
      • Tldraw (2)
    • 에러일지 (4)
    • Nextjs (4)
      • 공식문서번역 (2)
    • Nestjs (0)
      • 따라하며 배우는 NestJS (0)
    • 회고 (3)
      • 취업회고 (3)
    • 책 (2)
      • 모던 리액트 Deep Dive (0)

블로그 메뉴

  • 홈
  • Github
  • Linkedin
  • Portfolio

인기 글

최근 댓글

hELLO · Designed By 정상우.v4.2.2
너구리온
git rebase 전략
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.