[Git] Git rebase

sujin·2022년 10월 9일
0
post-thumbnail

끝나지 않는 git의 세계

Git rebase 란?

변경되는 내용을 병합할 때 사용하는 것으로, 두 개의 공통 base를 가진 branch에서 한 branch의 base를 다른 branch의 최신 커밋으로 branch의 base를 옮기는 작업 입니다.

git merge의 문제

  • 불필요한 merge commit을 생성한다.
  • 복잡한 프로젝트 history를

git rebase

  • 불필요한 merge commit 생성X
  • 같은 작업을 한 commit끼리
  • 기존의 commit들 뒤로 rebase commit이 붙는다.
  • commit의 고유 번호가 달라짐

    주의❗️conflict는 commit사이 사이에서 일어나는 작업 내용 사이의 충돌이므로 여러 개의 커밋이 한번에 충돌 날 수 있다.

squash

  • commit 흐름을 방해하는 commit message를 정리한다.


rebase하는 방법

새로운 작업을 모두 마치고 push하기 전

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

rebase 하는 동안 squash 진행 할 때

  1. 가장 오래된 commit을 pick 한다.
  2. 다른 커밋 메세지는 가장 오래된 commit을 기준으로 squash 한다.
  3. 다른 커밋의 작업 내역이 없어지는 것이 아닙니다.
  4. Esc -> :wq 로 창에서 빠져나온다

수정용 에디터에서 최종 commit 내용 작성

  1. 현재까지 적은 커밋 메세지가 전부 나타난다.
  2. 불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메세지를 정
    성껏 작성한다.
  3. Esc -> :wq 저장하고 에디터에서 빠져나온다.

rebase 성공!

  1. git log로 정리된 commit 내역을 확인한다.
  2. git push origin feature/login -f -f 옵션을 사용하여 force push를 진행한다.

rebase 중 conflict 해결하기

  1. 먼저, 충돌이 일어난 코드를 수정한다.
  2. git add . (git commit은 하지 않는다. 수정 사항이 없으니까)
  3. git rebase --continue를 진행한다.
  4. 멈춰 있던 rebase가 진행된다.
  5. 충돌이 여러번 나면 그때마다 충돌을 해결하고 git add . git rebase --continue 를 반복한다.
  6. 계속 해결이 안된다면, git rebase --abort로 아예 rebase를 진행하기 전으로 돌아 갈 수 있다.
profile
개발댕발

0개의 댓글