230609 git rebase
git rebase는 말 그대로 기준(base)을 다시(re) 잡는 명령어이다.
평소에는 pull을 받고 merge를 통해 합치지만, 간혹 git에서 rebase를 사용하여 해결하라는 메시지가 뜰 때가 있다.
rebase는 merge 처럼 다른 브랜치의 간 병합을 위해 사용되지만, 과정은 다르다
git rebase란
git rebase 역할
실제로 일어나는 일을 설명하자면 일단 두 브랜치가 나뉘기 전인 공통 커밋으로 이동하고 나서 그 커밋부터 지금 Checkout 한 브랜치가 가리키는 커밋까지 diff를 차례로 만들어 어딘가에 임시로 저장해 놓는다. Rebase 할 브랜치(역주 - experiment)가 합칠 브랜치(역주 - master)가 가리키는 커밋을 가리키게 하고 아까 저장해 놓았던 변경사항을 차례대로 적용한다. -https://git-scm.com/
- 두 브랜치의 공통 커밋으로 이동
- 공통 커밋부터 현재 브랜치의 마지막 커밋까지의 변경 사항(diff)을 차례대로 만들어 임시 저장
- 현재 브랜치가 Rebase할 브랜치 커밋을 가리키게 함
- 임시 저장했던 변경 사항을 가져와서 커밋 순서대로 적용
git rebase 사용방법
git rebase <기준잡을브랜치>
feature 브랜치에서 main 브랜치로 기준 다시 잡기
git checkout feature
git rebase main
merge와 rebase 차이
merge는 두 브랜치 간의 변경사항을 비교하여 병합 커밋을 생성한다.
rebase는 현재 브랜치의 변경 사항을 임시 저장하고, 다른 브랜치의 기록 끝으로 이동한 다음, 그곳에서 새로운 변경 사항을 비교하여 통합한다.
rebase 장점
merge는 두 브랜치 간 병합을 해도 여전히 분기가 나뉜 상태이지만
rebase는 한 쪽 브랜치로 기준을 다시 잡음으로써, 선형적인 히스토리 구조를 가질 수 있다.
텍스트 파일에서 rebase 연습 해보기
practice.txt를 만들고 커밋
첫 줄에 'hello world'를 작성하고 커밋
" 'hello world' 작성" 커밋 위치에서의 파일 상태
feature 브랜치에서 각각 한줄당 한개의 커밋을 작성해 3개의 커밋 쌓기
master 브랜치에서도 각각 한줄씩 작성하고 커밋하여 3개의 커밋을 쌓기
현재 히스토리 상태는 아래와 같고,
feature와 master 브랜치에서 첫 번째 줄은 동일하고 2~4번째 줄은 서로 다르게 작성되어 있다.
이때 feature 브랜치에서 master의 변경 사항을 모두 가져오기 위해 rebase를 사용할 수 있다.
아래 코드의 2번째 줄을 보면 rebase로 인해 공통 커밋부터 현재까지 master의 변경사항을
(현재 변경 사항)으로 모두 가져왔다.
이제 master의 변경 사항은 모두 들어 왔으니
두 브랜치의 공통 커밋 이후부터 시작하는 feature의 커밋을 하나씩 병합하면 된다.
"practice.txt 첫 번째 작성" 커밋 병합하기
"practice.txt 두 번째 작성" 커밋 병합하기
feature에서 쌓았던 마지막 커밋인 "practice.txt 세 번째 작성" 커밋까지 모두 병합하면
아래와 같이 선형적인 히스토리 구조를 가지는 모습을 볼 수 있다.
현재까지의 rebase과정 그림
이미지를 클릭하면 크게 볼 수 있습니다.
rebase와 관련된 참고 자료
'내일배움캠프' 카테고리의 다른 글
2306011 내일배움캠프 4주차 WIL (0) | 2023.06.11 |
---|---|
230610 stackblitz에서 nodejs 프로젝트 npm 명령어 자동 실행하기 (0) | 2023.06.10 |
230608 youtube iframe player api 볼륨 값 localStorage에 저장하고 불러오기 (0) | 2023.06.08 |
230607 자바스크립트 타입을 고려해 sum() 함수 만들기 (0) | 2023.06.07 |
230606 자바스크립트 random() 대안으로 getRandomValues() (0) | 2023.06.06 |