1. Rebase
- 브랜치의 Base Commit(= Base) 를 재설정 (= Re) 하는 명령어
- 브랜치의 커밋 히스토리를 재구성하거나 병합할 때 사용함
- 주로 더 깔끔하고 직선적인 커밋 히스토리를 유지할 수 있다는 장점이 있음
2. Merge vs Rebase
- Merge는 두 브랜치를 병합하면서 병합 커밋(merge commit)을 생성함
- Rebase는 병합 커밋 없이 커밋 히스토리를 재구성하여 더 깔끔한 히스토리를 만듦
<bash />
# Merge
# main 브랜치로 이동
git checkout main
# feature 브랜치를 main에 병합
git merge feature
# Rebase
# feature 브랜치를 main 브랜치 위로 재배치
git checkout feature
git rebase main
# 충돌이 발생하는 경우, 수정 후
git add <파일>
git rebase --continue


rebase 사용에 관하여..
공유된 브랜치에서는 Rebase를 피하는 게 좋다고 하는데,
Rebase는 히스토리를 변경하므로, 다른 사람이 작업 중인 브랜치에 적용하면 충돌이 발생할 수 있기 때문이다. (개인 브랜치에서만 사용하는 것이 안전)
하지만 반대 의견으로 깃 히스토리가 깔끔해 진다는 장점이 있기 때문에, 많은 사람들과 협업을 할 때 리베이스를 사용하는 것을 권장하는 팀이 많다는 이야기도 있다.
--force-with-lease (git push --force-with-lease)
강제 Push의 안전한 대안, 원격 브랜치가 예상한 상태일 때만 강제 Push를 허용함 (즉, 다른 사람이 원격 브랜치를 수정한 경우 Push 실패)
* Rebase 후, 로컬 브랜치의 히스토리가 원격 브랜치와 다르기 때문에, 일반적인 git push는 실패함
-> 따라서, Rebase 후에는 강제 Push(git push --force)를 사용하여 원격 브랜치의 히스토리를 로컬 브랜치와 동일하게 덮어씌워야함
'DevOps' 카테고리의 다른 글
[Git] git commit --amend , 가장 최신 커밋 수정 (0) | 2024.12.18 |
---|---|
[Jenkins] git branch 설정방법 (0) | 2024.11.28 |
[Jenkins] ERROR: Error cloning remote repo 'origin' 해결 방법 (1) | 2024.11.15 |
[Git] git stash (0) | 2024.04.23 |
[Docker] Docker rootless 설치 (0) | 2024.03.21 |