Git Rebase

onebbu·2023년 9월 9일
0

Git+GitHub

목록 보기
11/12

Rebase

마스터 브랜치에 올라가 있는 커밋들을 내 브랜치에 반영하는 것

Git - git-rebase Documentation

Rebase로 할 수 있는 작업

머지 활용시 발생하는 문제 커버 가능

  1. 현재 내가 내 feature 브랜치에서 작업 중인데 다른 사람이 작업 후 마스터 브랜치에 병합한 상태
  2. 마스터 브랜치에 반영된 내용을 내 feature 브랜치로 가져와서 작업(커밋 필요) → 반복
  3. 머지 커밋의 수가 늘어나서 무의미한 커밋이 많아지고 깃 히스토리를 지저분하게 만듬

⇒ Rebase: 내 feature 브랜치의 베이스를 새로 설정하는 작업

Rebase(아래)와 Merge(위) 비교한 이미지

git rebase master를 하면 마스터 브랜치 자체를 리베이스 하는 것이 아닌 마스터 브랜치 위로 내 브랜치를 올리는 것,

피처 브랜치에 있는 커밋들은 재생성되고 히스토리는 마스터 브랜치 끝에 새롭게 쓰임

Rebase를 하지 말아야 할 경우

이미 공유한 커밋을 리베이스 하는 것 X

ex) 피처 브랜치에서 작업 중인데 마스터 브랜치를 리베이스 하는것

다른 개발자들도 마스터 브랜치를 당겨 가서 내가 이미 갖고 있는 커밋을 그들도 가지고 있을 것임

마스터 브랜치를 리베이스하면 커밋이 생성되는데 이 때 푸시를 시도하면 바로 문제가 발생

리베이스 명령어를 실행하는 브랜치가 변경되는 브랜치여야 함(feature branch)

Rebase가 실패했을 때

  1. 충돌 수정
    명령어: git rebase --abort
    충돌이 일어난 파일을 수정(일반적인 머지 충돌 해결 방식과 동일
  2. 리베이스 재개
    명령어: git rebase --continue

Interactive Rebase

git rebase -i HEAD~4 : HEAD 뒤 숫자는 현재 시점으로부터 몇 개까지 커밋을 확인 할 건지 개수

커밋 이력이 지저분할 때 사용

한개의 커밋 수정

브랜치를 새로 생성한 후 git rebase -i HEAD~4 명령 입력

커밋 해시 cbee26b가 과거 시제이므로 현재 시제로 변경(added → add)

pick → reword / added → add

rebase 결과 이미지

여러 개의 커밋 수정

pick 명령어를 전부 reword로 바꾸면 커밋 전부를 재작성하게 됨

커밋 병합

add bootstrap하고 forgot to add bootstrap Javascript script 합쳐서 add bootstrap 커밋 하나로 병합

(커밋 삭제가 아닌 목록에서 지워서 깃 히스토리에서도 확인 할 수 없도록)

fixup 명령(fixup: 병합 후 커밋 폐기, squash: 병합 후 커밋 폐기 X)

  1. git rebase -i HEAD~9명령 실행
  2. 병합 후 폐기할 커밋에만 pick → fixup 수정
  3. 결과(add bootstrap + forgot to add bootstrap Javascript script 병합)

커밋 삭제

my cat made this commit을 삭제하고 싶은 상황

  1. git rebase -i HEAD~2명령 실행
  2. 폐기할 커밋에만 pick → drop 수정

  1. 결과

profile
느리지만 조금씩 발전해가기

0개의 댓글