Rebase (리베이스) 란 ?
- 브랜치 재배치 : 주로 다른 브랜치의 변경사항을 현재 브랜치로 통합하는데 사용된다.
- 협업할때 : 다른 개발자가 작업한 변경사항을 현재 작업중인 브랜치로 통합하려고 할때
- 기능 브랜치를 유지할 때: 기능 브랜치를 유지하면서 기본 브랜치의 변경 사항을 기능 브랜치에 반영하려고 할때
- 커밋 수정 : 이전 커밋을 변경하거나 재배열할 때 사용된다.
★ rebase를 사용하면 커밋 히스토리를 변경하므로 공동 작업 중인 경우 다른 개발자의 작업이나 공유된 브랜치에 영향을 줄 수 있다. 따라서 주의해서 사용해야 한다.★
- merge를 사용하면 브랜치가 넓어지지만 rebase를 사용하면 높아진다(길어진다)
주의사항
- 이미 공개 저장소에 push한 커밋을 rebase하지마라
rebase는 기존의 커밋을 그대로 사용하는것이 아니라 내용은 같지만 다른 커밋을 새로 만든다. 새 커밋을 서버에 push하고 동료 중 누군가가 그 커밋을 pull 해서 작업을 한다고 하자. 그런데 그 커밋을 git rebase로 바꿔서 push해버리면 동료가 다시 push 했을때는 동료는 다시 merge해야한다. 그리고 동료가 다시 merge한 내용을 pull 하면 내 코드는 엉망이된다.
rebase 와 merge 의 차이
- merge는 브랜치를 하나로 결합하는데 사용되고, rebase는 브랜치를 재배치하여 더 깔끔한 이력을 유지하는데 사용된다.
- merge (병합)
- rebase (재배치)
Rebase 하기
A. 소스트리에서 작업하기
ex) 지금 작업하고 있는 브랜치(test) 를 main 에 rebase 하자 = feature/test 브랜치를 재배치하여 main 브랜치 위에 붙 여주는 행위
1. patch
2. 브랜치 현행화하기
2.1 main 브랜치로 체크아웃후
pull > '병합 대신 재배치' 체크하고 확인
3. 재배치
3.1 재배치 하려는 브랜치로 Checkout (내가 작업했던 브랜치)
3.2 origin / main 을 찾아서 > 마우스 오른쪽 클릭 > 재배치
★이때 커밋하지 않은 변경사항이 없어야한다. 커밋을 하던지 스태시로 넣던지 하기
4. 코드 변경사항이 잘 들어왔는지 확인하기 > 새로고침
5. 원격에 강제 push
★[상황 by 상황- local → origin 으로 아무런 푸시를 안했을때는 필요없는 행위]
git push -u origin + // 브랜치가 길어서 오타날 수 있으니 브랜치명은 복붙하는것을 추천
ex) git push -u origin +feature/test
★덮어씌우니 신중하게 할것
6. 작업이 되었는지 확인
B. git 터미널로 작업하기 (feat. 명령어)
1. main 브랜치로 체크 아웃
git checkout main
2. main 브랜치 현행화 pull(update)
git pull origin master
3. rebase해서 이동시킬 브랜치 체크아웃 후 터미널 시작
ex) feature/test 로 Checkout
git checkout test
2. git rebase -i (rebase로 뒤에 붙일 브랜치명)
ex) git rebase -i main
3. 충돌 발생 시 수정
4. 로컬 소스 확인후 강제 푸시로 원격에 푸시
git push -u origin + // 브랜치가 길어서 오타날 수 있으니 브랜치명은 복붙하는것을 추천
ex) git push -u origin +feature/test
★덮어씌우니 신중하게 할것
참고사이트
https://git-scm.com/book/ko/v2/Git-브랜치-Rebase-하기
Git - Rebase 하기
Git에서 한 브랜치에서 다른 브랜치로 합치는 방법으로는 두 가지가 있다. 하나는 Merge 이고 다른 하나는 Rebase 다. 이 절에서는 Rebase가 무엇인지, 어떻게 사용하는지, 좋은 점은 뭐고, 어떤 상황에
git-scm.com
'깃 git' 카테고리의 다른 글
[git] Squash 란? 스쿼시하기/ 커밋 단장하기 (0) | 2024.07.09 |
---|---|
[github config] 단일 저장소만 사용자이름, 이메일 다르게 (0) | 2024.05.20 |
깃 branch 개념 (0) | 2023.06.28 |