Git Rebase

JH Cho·2022년 12월 19일
0

Git & Terminal

목록 보기
2/2

Git Rebase

merge와의 차이

merge는 병렬로 관리되며 각 브랜치가 남긴 커밋이 merge 시 시간에 따라 사이사이에 위치하여 작업의 파악이 어려워짐.

rebase는 직렬로 관리되며 rebase시 그림과 같이 직렬로 합쳐짐.

장/단점

  • 장점 : 직렬로 관리되어 버전별로 파악하기가 용이하다.
    여러 commit을 남기더라도 squash를 통해 단축 가능.

  • 단점 : rebase는 merge에 비해 어렵고 위험한 방식이다.

rebase하기

push 하기 전

  1. main branch 이동
  2. remote main을 pull
  3. git rebase -i main

rebase 중 squash

  1. 가장 오래된 commit을 pick
  2. 나머지는 squash(s) (다른 커밋 내역은 삭제가 아니고 남아있긴 함)
  3. esc -> :wq (창 빠져나오기)
  4. 수정 에디터 출현(최종적으로 현재 리베이스 커밋 작성)
  5. 불필요한 내용을 제거하고 현재 수정 내역에 대한 커밋 메시지를 작성
  6. esc -> :wq

성공한 경우

  1. git log 로 내역 확인
  2. push

push

  1. rebase는 커밋 히스토리를 정리하는 역할
  2. 같은 브랜치에서 rebase할 때마다 history가 달라질 수 있음.
  3. 수정 사항이 추가로 생긴 후 다시 rebase하면 history가 무조건 다름
  4. git은 history가 다른 branch의 push를 허용안함.
  5. git push origin feature/login -f 강제로 push

rebase 중 conflict 난 경우

  1. 충돌난 코드 수정
  2. git add . (commit X)
  3. git rebase --continue
  4. 또 conflict나면 1~3 반복
  5. 계속 해결이 안나면 git rebase --abort로 rebase 진행 전으로 복귀 가능

rebase 이전으로 돌아가기

  • git rebase --abort(rebase 도중)
  • git reflog(지점 확인) -> git reset --hard 돌아갈 지점(리베이스 후)

참고 명령어

  • git reset soft vs hard
  • git log
  • git reflog
  • git checkout
  • git stash & git stash apply & git stash clear
profile
주먹구구식은 버리고 Why & How를 고민하며 프로그래밍 하는 개발자가 되자!

0개의 댓글