본문 바로가기

IT

Git rebase 실습

728x90

https://learngitbranching.js.org/?locale=ko 

 

Learn Git Branching

An interactive Git visualization tool to educate and challenge!

learngitbranching.js.org

git rebase 실습
rebase 전

rebase : 가지가 이사를 간다.

git rebase --continue : 현재 c2의 가지가 이사를 갔다. (병합할 때 하나밖에 없기 때문에 자동으로 master 브런치로)

rebase 후

# 폴더 초기화
rm -rf *
rm -rf .git

# git 생성
git init

# c0
echo 1 > 1.txt
cat 1.txt
git add .; git commit -m "c0"
git log --all --graph --decorate --oneline

# c1
vim 1.txt
키입력 : a
방향키 좌
aaa
키입력 : ESC
:wq!
git add .; git commit -m "c1"
git log --all --graph --decorate --oneline

# bugFix 브랜치 생성 및 이동
git checkout -b bugFix
git log --all --graph --decorate --oneline

# c2
vim 1.txt
키입력 : a
## aaa를 ooo로 변경
키입력 : ESC
:wq!
git add .; git commit -m "c2"
git log --all --graph --decorate --oneline

# c3
git checkout master
vim 1.txt
키입력 : a
## aaa를 ppp로 변경
키입력 : ESC
:wq!
git add .; git commit -m "c3"
git log --all --graph --decorate --oneline

# bugFix 브랜치 이동
git checkout bugFix
git log --all --graph --decorate --oneline

# c2`
git rebase master
vim 1.txt
키입력 : a
## oooppp로 변경
키입력 : ESC
:wq!
git add .
git rebase --continue
## 커밋 메세지를 수정하고 싶으면 수정
키입력 : ESC
:wq!
git log --all --graph --decorate --oneline

merge와 rebase 차이

Merge는 branch를 통합하는 것이고, Rebase는 branch의 base를 옮긴다는 개념의 차이가 있다.

merge는 흡수 

하나의 브랜치(A)를 기준으로 다른 브랜치(B)를 흡수하고 싶으면 A의 브랜치에서(HEAD가 A를 가르킴) merge를 해야한다.

rebase는 이사

하나의 브랜치(A)로 통합을 하고 싶다하면 다른 브랜치(B)에서 rebase를 해야한다. 객체는 존재하지만 이전에 B를 가르키던 포인터가 없어진다.(비활성화됨)

 

결과는 똑같지만 merge는 기록을 인정하지만 rebase는 흔적을 없애버린다. rebase는 일자가 되어버린다. 가능한 merge가 좋은 것 같다.

 

 

'IT' 카테고리의 다른 글

Git cherry-pick 실습  (0) 2022.09.13
Git - detached head 실습  (0) 2022.09.13
Git merge 실습  (0) 2022.09.13
스프링 IoC 컨테이너 (Inversion Of Control)  (0) 2022.09.05
알약 랜섬웨어 오류 해결 방법  (0) 2022.08.30