본문 바로가기

맨땅에 헤딩하기/개발공부

[git] Rebase 정리

깃을 이용한 프로젝트를 진행할 때 이미 구현되어진 기능들을 보호하기 위해 내 브랜치를 따로 파서 작업을 한다. 작업마다 브랜치를 하나씩 파다 보면 마스터를 중심으로 서로 다른 업데이트들을 만들어내는데 나중에 작업이 끝나면 얘네들을 안전하게 합쳐주는게 관건이다. 깃의 특성상 어설프게 합쳤다가는 누군가의 작업물이 날아가던가 마스터가 돌아올 수 없는 강을 건너버리는 수가 있다. 깃에서 브랜치들을 합치는 방법들은 크게 Merge 와 Rebase 로 나뉜다. 처음엔 되고말고 구글링해서 Merge로 합쳐버렸는데 그게 딱히 좋은 방법이 아니라고 해서 Rebase를 따로 공부해 보았다. 

 

Rebase는 내가 작업중인 브랜치에 다른 브랜치의 최신 커밋내용을 끌어오고 싶을 때 새로운 커밋을 만들어 이 두개의 브랜치를 합쳐준 뒤 그 내용을 베이스로 내 작업을 시작할 수 있게 한다. Merge와 다른점은 히스토리가 직선모양으로 남는다. Merge를 이용해 브랜치를 합쳐주면 히스토리 모양이 뒤죽박죽이 되어버리고 추후에 문제가 생겨 커밋내용을 검토하는게 쉽지않게 된다. 하지만 Rebase를 사용하면 히스토리가 직선으로 쭉 뻗기 때문에 추적이 쉽다. 

 

 

주의할 점은 퍼블릭 히스토리에 리베이스 하지 말 것. 이미 release 된 퍼블릭 레포지토리의 커밋내용을 rebase 하게되면 옛날에 만들어놓은 커밋을 내 브랜치에 만들어놓은 최신 커밋이랑 바꿔치기 하거나 결과적으로 내 프로젝트의 일부가 사라지는 참사가 일어날 수도 있다. 

 

Rebase를 하는 방법에는 두가지가 있는데 하나는 standard 그리고 또다른 하나가 Interactive 이다. 

Command line을 작성하는 방법 비슷하다. git rebase <브랜치이름> 이렇게 써주면 자동으로 리베이스 하고자 하는 브랜치의 커밋을 내 브랜치에 적용시키는 새로운 커밋이 만들어 진다. 이렇게 기본으로 쓰는 방법이 standard 이고 Interactive는 commend line에 --i 만 추가해주면 된다. git rebase --i <브랜치이름> 이렇게 쓰면 된다. i 를 써주게 되면 그동안의 커밋내용들을 하나하나 검토하면서 필요없는 애는 지우거나 최신의 커밋과 합쳐주고 혹은 커밋순서를 바꾸는 등 히스토리를 정리하면서 합쳐줄 수 있다. Interactive 버전으로 command line을 써주면 editor 열리게 되는데 여기서 그동안의 커밋 히스토리를 가공하면 된다. 

 

출저: https://www.atlassian.com/git/tutorials/rewriting-history/git-rebase