til git rebase

이영주·2020년 12월 6일
2

rebase에 대해 알아보자

-두개의 브랜치에서 각각 다른 커밋을 한다고 했을 때, 헤드가 되는 기준점(base)를 다시 설정한다는 의미로 marge와는 차이점이 있다.
git에서 base는 나의 branch를 딴 시점의 master base를 의미한다.
master branch의 가장 최신 base는 HEAD라고 한다.

marge와 차이점

rebase를 하는 이유

  • 위와 같은 두개의 브랜치에서 각각 다른 커밋을 하는 상황을 가정에 두어보자,
    두 브랜치를 marge할 경우 두개의 브랜치가 서로 합쳐지면서 커밋이 새로 생성되는데
    이게 브랜치가 많으면 많을수록 구조가 복잡해지게 된다.
  • 두개의 브랜치를 하나의 커밋 히스토리로 정리하고 새로운 head로 base를 다시 잡아준다.

(필수) rebase 전 백업하기

cp -rpv adwards-frontend adwards-frontend2

git rebase flow

  1. 로컬 master 브랜치 상태 최신화
    git checkout master
    git pull origin master
  1. 작업중인 브랜치로 돌아온 후 rebase
    git checkout 작업브랜치
    git rebase -i master
  1. squash
    git rebase -i head~4
    맨 위의 가장 상단의 pick 만 남겨두고, 다음번째 줄 pick -> squash or s 입력
  1. confict 발생시 해결
    conflict가 발생하면 conflict를 해결해나가면 된다.
    git add (conflict 해결한 파일명)
    rebase --continue를 입력한다.
    squash 한 commit들이 많을수록 지속적으로 발생되며 위의 과정을 반복

  2. 마지막 commit 메시지 편집 / push 하기
    commit 메시지들을 편집한다
    여기서 conflict를 해결한 경우라면 push 명령어에 -f 를 붙여 강제로 push한다.

과거의 커밋 수정하기(활용)

  • 여러 커밋을 하면서 작업하는 도중에 빠뜨린 내용이 있을 때 git rebase가 없다면 새로운 커밋을 추가해야 해서 커밋 히스토리에 같은 기능의 커밋이 두 개 이상이 될 테지만, git rebase를 사용한다면 같은 기능의 커밋을 한개로 유지한다.
  1. 깃 히스토리 확인
    git log --graph

  2. rebase 하기
    git rebase -i head~4
    수정해야할 커밋이 head로부터 4개 전일 경우

  3. commend 바꾸기
    커밋 앞의 “pick”을 “edit”으로 바꿔준다.

  4. 수정
    파일에서 오타를 수정하고 git add .와 git commit --amend를 통해 현재 커밋을 덮어씌운다.

  5. git rebase --continue
    conflict가 뜨면 해결 후에 coutinue 해준다.

0개의 댓글