[Git] Merge, Rebase, Squash?

chener·2023년 3월 4일
0

git

목록 보기
1/1

Merge, Rebase, Squash?

어떠한 작업을 진행 한 후 기존의 브랜치와 병합을 해야할 떄가 온다.
이때 Merge를 하려고 보면 3가지 옵션이 주어지는데 이들의 차이를 정리하기 위해 글을 작성한다.

!! 해당 게시물은 개인 공부용으로 틀린 내용이 있을 수 있습니다 !!

기본적으로 origin branchdev branch가 아래와 같이 존재한다고 하자.

현재 개발자는 dev branch에서 작업을 마쳤으며 origin branch에 작업한 것을 적용하고 싶어한다.

이 때, 개발자가 행할 수 있는 방식은 3가지이다.

1. Merge

위의 경우는 dev branchorigin branch에 merge한 경우이다.

  • Merge를 진행한 경우 dev branch에서 작업한 것들이 마지막 origin branch와 합쳐지는 말 그대로 병합이 일어난다.
  • 다만 두 개의 branch에서 같은 파일을 다르게 수정하였을 경우 merge 시점에서 둘 중 어느 것을 따라갈지 지정을 해주어야 한다.
    → 이는 commit 시간에 따라 적용 된 후 마지막에 Merge Commit 과정을 거쳐 일어나게 된다.
  • Merge 이후에도 dev branch의 기록이 남아있다.

2. Rebase and Merge

  • Rebase and Merge의 경우 origin branch에서 진행한 commit, dev branch에서 진행한 commit이 합쳐지는 것이 아닌 origin branch의 마지막 commit 뒤에 이어 붙는 형식이다.
  • 이 경우 2개의 branch가 아닌 단일 branch로 인식하게 된다.
  • 충돌 확인 과정인 Merge Commit이 따로 존재하지 않고 dev branch가 생성 된 이후의 origin branch의 commit과 하나하나 대조하여 충돌 확인이 일어나게 된다.

3. Squash and Merge

  • Squash and Merge의 경우 dev branch에서 진행된 commit들을 하나의 commit으로 만들어 origin branch에 merge한다.
  • 이 경우 여러 commit들이 하나의 commit으로 합쳐질 때 Merge Commit을 진행하게 된다.

그래서 무엇을 써야해?

  • 선택 기준은 Commit History를 어떻게 남길 것인가 라고 이해하였다.
  • 정확한 Merge 시점을 나중에도 찾아볼 것 같다 → Merge
  • 브랜치 정리를 진행하면서 Commit History를 최대한 유지하고 싶다 → Rebase
  • Commit History를 최대한 깔끔하게 하나로 뭉치고 싶다 → Squash

Reference

profile
독 짓는 젊은이

0개의 댓글