Git Merge vs Rebase

Alex J. Lee·2021년 9월 5일
0

Git

목록 보기
1/1

mergerebase 모두 두 개의 브랜치를 합치기 위해 사용되지만 합치는 방식에 차이가 있다.

Merge

git switch main
git merge feature
  • 만약 feature 브랜치가 갈라져 나온 이후 master 브랜치에 변경 사항이 없다면 fast-forward되어 feature 브랜치의 commit들이 main 브랜치의 가장 끝에 이어붙여진다.

  • 그렇지 않고 main 브랜치에 변경 사항이 있는 경우, 변경사항들이 순서대로 replay된 후 새로운 merge commit이 생성된다.

  • 새로운 merge commit이 생성된다 하더라도 이미 양쪽 브랜치에 존재하던 commit들이 수정되지는 않는다.

  • 모든 commit이 보존되기때문에 commit history가 복잡해질 수 있다.

Merge Squash

git switch main
git merge --squash feature
git commit
  • main 브랜치에 feature 브랜치의 commit들이 하나의 commit으로 압축되어 main 브랜치에 merge된다. main 브랜치에는 feature 브랜치의 commit history가 남지 않게 된다.

Rebase

git switch feature
git rebase main
  • feature 브랜치를 main 브랜체이 rebase 하게 되면 현재 main 브랜치의 가장 끝에서 feature 브랜치의 commit들이 새로 생성된다.

  • commit history가 새로 써지며 feature 브랜치에 있던 commit들의 id가 바뀐다.

  • 불필요한 merge commit이 생성되지 않으며 history가 정리된다.

  • feature 브랜치에서 작업하고 있는 동안 main에서 변경사항이 발생하면 rebase를 해 주어 main의 변경사항을 feature에 미리 반영해 주는 것이 좋다.

  • 다른 사람과 공유 중인, 이미 remote 레포지토리에 올린 commit은 절대 상의 없이 rebase하지 말 것!

Merge/Rebase 취소

git reflog
git reset --hard <commit-id>
  • reflog로 돌아갈 위치의 commit id를 확인 한 후 reset으로 이전 commit으로 돌아감
profile
🦄✨글 잘 쓰는 개발자가 되기 위해 꾸준히 기록합니다 ✨🦄

0개의 댓글

관련 채용 정보