Important
- 리베이스와 병합의 차이
- git rebase
- 리베이스를 쓰지 말아야 할 상황
* 리베이스? 병합?
협업 과정에서 각자 피처 브랜치를 이용해 작업하는것을 이제는 안다. 여기서 내 작업이 끝나기전에 누군가의 작업물이 메인 브랜치에 올라간 경우 변경사항을 최신으로 유지하기 위해서 나의 피처 브랜치에 pull을 해야 할 것이다. 이 때 병합 커밋이 필연적으로 발생할텐데 이런 경우가 아주 빈번하게 발생한다면 나의 작업과는 관계없는 병합커밋이 많이 생기게 되어서 이력이 지저분해 질 것이다.
병합 대신 리베이스를 사용하면 피처 브랜치의 베이스를 새로 설정해서 일직선으로 만들어준다.
피처 브랜치의 커밋들을 그대로 다시 생성하면서 메인 브랜치의 끝 지점에서부터 배치한다.
내가 작업하지 않은 병합 커밋들을 삭제하고 일직선으로 재배치 함으로써 이력이 보기 쉽게 되었다.
참고로 feat 브랜치의 커밋들은 재배치 되면서 커밋 해시가 변경된다.
* 리베이스를 하지 말아야 하는 경우
리베이스를 실행하는 경우 기존 커밋들이 재배치 되면서 커밋 해시가 변경된다고 했다.
그렇기 때문에 다른 개발자들이 이미 가지고 간 커밋을 리베이스하면 안된다.
피처 브랜치를 메인 브랜치로 푸시하고 병합히 된 후 누군가 메인 브랜치를 가져가서 해당 이력을 가지게 되었고 작업을 한다면 절대로 리베이스를 사용하면 안된다.
한줄로 정리할 수 있다. "이미 공유한 커밋을 리베이스 하면 안된다."
* 리베이스와 충돌
리베이스 도중 충돌이 발생한 경우 취소하고 이전으로 돌아가거나 충돌을 처리하는 방법이 있다.
충돌을 처리하는 방법은 병합과 비슷하다.
$ git add/rm <conflicted_files>
$ git rebase --continue
충돌이 발생한 파일을 처리한 후 스테이지에 올리고 리베이스를 계속 진행하면 된다.
리베이스는 유용한 기능이지만 사용하지 말아야 할 때를 정확히 알고 있어야 한다.
'프로그래밍 > Git & Github' 카테고리의 다른 글
[Git & Github] 17. Git tag: 히스토리상의 중요한 순간에 표시하기 (0) | 2022.11.04 |
---|---|
[Git & Github] 16. Interactive Rebase를 사용하여 히스토리 삭제하기 (0) | 2022.11.04 |
[Git & Github] 14. Git 협업 워크플로우 (0) | 2022.10.26 |
[Git & Github] 13. Github의 이모저모: 잡다한 지식 (0) | 2022.10.25 |
[Git & Github] 12. Fetch와 Pull (0) | 2022.10.24 |