[Git] Merge, Squash and merge, Rebase 차이점 및 장단점

쿼카쿼카·2023년 5월 9일
0

Git

목록 보기
2/3

Merget

  • 우리가 일반적으로 하는 머지다
  • 그동안 커밋이 시간 순서대로 배치되며 머지했다는 커밋도 함께 뜨며 완료

브랜치를 두개로 나눠 각각 진행

병합하면 시간 순서대로 재배치 및 MC라는 머지 커밋 발생

장점

  • 모든 커밋 기록을 남길 수 있다. 오류 찾을 때 용이하겠쥬?

단점

  • 커밋 로그가 겁나 지저분해진다. 그러거나 말거나 기록이 중요한 거 아닌가?

Squash and merge

  • 브랜치에서 한 커밋들을 하나의 원기옥으로 모아 딱 한 개의 커밋만 남긴다.
  • 그 동안 정들었던 커밋들은 싹다 손절한다. (역사 남길라고 커밋한 건데 이게 말이 되나 싶었음)
  • 말 그대로 각 브랜치에서 한 작업들로 크게크게 커밋이 남는다.
  • 시간 순서 그딴 거 없다. 먼저 머지한 애들이 앞에 온다.

장점

  • 커밋 로그가 깔끔해지고, 가독성이 떡상한다.

단점

  • 기록이 다 안 남아서 어디서 문제였는지 고칠라면 브랜치를 다 뜯어봐야한다?

Rebase

  • a 브랜치 변경사항이 b 브랜치에서 일어난 것처럼 정렬할 수 있다.
  • 시간 상관 없이 마지막에 리베이스 되는 친구들을 마지막 커밋에 붙인다.

먼저 B를 머지해주면 일반 머지와 다를 게 없다.

C를 머지할 때는 B와의 충돌을 모두 제거한다.(충돌 해결 커밋은 없음)

  • C1 ~ C4와 B1의 충돌을 제거합니다.
  • B1과의 충돌을 제거한 C1 ~ C4와 B2의 충돌을 제거합니다.
  • B2과의 충돌을 제거한 C1 ~ C4와 B3의 충돌을 제거합니다.
  • B3과의 충돌을 제거한 C1 ~ C4와 B4의 충돌을 제거합니다.
  • B4와의 충돌을 제거한 C1 ~ C4를 B4 뒤에 붙입니다.
  • 위 같은 flow를 따른다. C들의 각 커밋을 B1~B4와의 충돌을 제거하고 머지한 애들이 붙기 때문에 백틱이 붙여 새로운 코드임을 알려준다.

장점

  • 보기에도 가장 깔끔하고, 버전 관리에 좋다.

단점

  • 일반 push로는 안 될 때가 있어 force push가 필수다.(안전 박살)
  • 리베이스의 치명적인 단점 중 하나는 바로 머지 충돌(Merge Conflict)이 발생했을 경우다. 이건 머지할 브랜치의 히스토리 자체를 그대로 복사해서 대상 브랜치의 히스토리에 박아버리는 방법이기 때문에 충돌이 발생하게 되면 Merge commit이나 Squash and merge처럼 충돌이 한번 발생하는 것이 아니라 각각의 커밋에 하나씩 충돌이 발생한다. 이게 머지할 브랜치의 커밋이 몇개 안되는 상황에서는 할만할지 몰라도 커밋이 몇 백개씩 되는 큰 기능의 브랜치를 리베이스로 머지했다가 충돌이 나면 퇴사 마렵겠네

참고 사이트

profile
쿼카에요

0개의 댓글