git rebase

이해용·2022년 6월 11일
0
post-thumbnail

git merge vs git rebase

git merge와 git rebase의 기능은 비슷하지만 다르다고 한다.

git merge 의 문제점

불필요한 merge commit 생성

모든 feature branch마다 "merge commit" 이 남습니다. 만약 main branch를 공유하는 개발자가 많고, 프로젝트의 규모가 크다면, branch history를 관리하기 어렵습니다.

복잡한 프로젝트 history

독립된 branch에서 로직 하나를 작성하고 수정하더라도, 다른 작업과 그 내역이 겹쳐 구분하기 어려워집니다.

git rebase 사용

Rebase는 내 commit의 base를 변경하여 commmit history를 일렬로 잘 정리해줍니다.

새로운 작업 완료 후 push 전

  1. main branch로 이동하여 remote main을 pull 한다.
  2. push 할 feature branch로 이동
  3. git rebase -i main을 진행

rebase하는 동안 squash 진행할 때에는

  1. 가장 오래된 commit을 pick 한다.
  2. 다른 commit message는 가장 오래된 commit 기준으로 squash 한다.(다른 커밋의 작업 내역이 없어지는 것이 아님)
  3. esc -> :wq! 로 창에서 빠져나온다.

수정용 에디터 추가

  1. 최종적으로 rebase된 commit의 내용을 작성하는 부분
  2. 현재까지 적은 commit message 전부 나타난다.
  3. 불필요한 내용을 제거하고 현재 수정 내역에 대한 commit message를 정성껏 작성
  4. esc -> :wq! 저장하고 에디터에서 빠져나온다.

(git log로 커밋 메시지 확인 가능하며 이후 push를 진행한다.)

rebase 후 push 하기

  1. rebase는 commit history를 정리하는 역할을 한다.
  2. 같은 branch에서 rebase를 할 때마다 history가 달라질 수 있다.
  3. 수정 사항이 추가로 생긴 후 다시 rebase하면 history가 무조건 달라진다.
  4. git은 history가 다른 branch의 push를 허용하지 않는다.
  5. git push origin "branch name" -f -f 옵션을 사용하여 force push를 진행한다.

rebase 중 충돌 해결하기

  1. 충돌이 일어난 경우 rebase가 도중에 멈춰 있다.
  2. 충돌이 일어난 코드를 수정 후 git add .
  3. git commit은 수정사항이 없으므로 진행하지 않는다.
  4. git rebase --continue
  5. 중단된 rebase 진행된다.
  6. 충돌이 여러번 나면 그 때마다 충돌을 해결하고 git add . git rebase --continue 반복
  7. 해결이 되지 않는다면 git rebase --abort로 rebase 진행 전 상황으로 돌아간다.

최종 git rebase 순서

  1. git add .
  2. git commit -m "남길 메시지"
  3. git rebase -i master
  4. i 버튼 누른 후 squash 진행 -> esc -> :wq
  5. i 버튼 누른 후 commit 하나로 합친다. -> esc -> :wq
  6. git push origin "branch name"

참고 및 출처
위코드 강의
https://docs.microsoft.com/ko-kr/azure/devops/repos/git/merging?view=azure-devops&tabs=visual-studio-2019

profile
프론트엔드 개발자입니다.

0개의 댓글