Git merge & rebase

박효상·2022년 12월 23일
0

Git

목록 보기
2/2
post-thumbnail

Git merge란?

  • 코드 변경 사항들을 담은 하나의 브랜치를 다른 브랜치로 통합시키는 명령어
  • 커밋 기록들은 브랜치에 시간순서대로 남겨진다
  • 장점
    • git merge <코드 변경사항들이 담긴 branch명> 이 명령어 단 한줄로 대상이 되는 브랜치로 통합이 가능해 간단하다
  • 단점
    • merge시 마다 불필요한 merge 커밋을 생성하여 프로젝트 규모가 커질수록 branch history가 지저분해지기 쉽다
    • 여러 작업들과 커밋들이 합쳐지고 사이사이 결합되면서 내역 구분이 어려워진다

Git rebase란?

  • git merge 같은 브랜치 병합 명령어
  • 브랜치 병합시 현재 내 커밋의 베이스를 병합 대상 브랜치의 맨 끝 커밋으로 재조정하여 커밋 히스토리를 시간순이 아닌 작업 단위로 확인 가능
  • git merge와 달리 merge 커밋이 없다
  • rebase 주의사항
    • 같은 브랜치에서 rebase 할 때마다 commit history 가 달라질 수 있다. 수정사항이 추가로 생긴 후, 다시 rebase 하면 history가 무조건 달라지는데, git은 history가 다른 브랜치의 푸시 허용 x
      • 이 문제 해결을 위해 force push
        • git push origin feature/login -f
  • 예시
    • rebase 전
      • develop : (a) - (b) - (c) -
      • feat/one : --------------L _ (d) - (e)
      • feat/two : --------------L _ (f) - (g)
    • feat/one과 develop 브랜치 병합 후
      • develop : (a) - (b) - (c) - (d) - (e) -
      • feat/two :---------------L _ (f) - (g)
    • feat/two rebase 한 후
      • develop : (a) - (b) - (c) - (d) - (e) - (f) - (g)

Git squash란?

  • git commit 들 중 하나로 합쳐도 될 것 같은 공통된 내용을 가진 커밋들을 하나의 커밋으로 통합해주는 기능
  • 명령어
    • git rebase -i develop : -i 라는 명령어를 통해 하나의 창이 띠워지며 여기서 squash 기능을 통해 여러 커밋들을 하나의 커밋으로 합쳐 rebase 할 수 있게 된다
profile
집념의 백엔드 개발자

0개의 댓글