서론
git을 관리하다보면 다양한 사람들과 함께 형상관리를 위해서 노력하는 일에 가장 많은 고민과 노력을 하게된다. 또한 올바른 형상관리는 단순히 프로젝트를 진행하며 생기는 변수에 대응하기 위한 수단이 아닌 프로젝트의 전체적인 과정을 확인하고 탄탄한 개발을 진행하는 밑거름이 된다.
git을 관리하며 흔히 말하는 git flow 방식을 많이 사용을 한다. 이 부분에서 많은 branch가 사용이되고 나눠지고 합쳐지는 단계를 반복하며 하나의 멋진 프로젝트가 생성이 된다.
커밋 그래프를 단순하게 가져가고 의미있는 커밋들을 관리하기 위해서는 커밋 그래프가 한 눈에 들어오는 일은 분명 중요하다. 오늘은 그 목표를 이루기 위한 rebase에 대해서 알아보고자 한다.
본론
위와 같이 프로젝트를 진행하며 생기는 흔한 커밋 그래프이다.
하지만 위와 같은 커밋 그래프는 형상관리의 흐름을 파악하기 어려운 그래프이다. 위의 그래프에서 rebase를 통해서 간편해지는 그래프를 확인해 보겠다.
위와 같이 다양한 커밋들을 하나의 커밋으로 관리하며 그래프가 간단해지는 모습을 볼 수 있다.
물론, 위와 같이 다양한 커밋들이 하나의 커밋으로 합쳐지는 부분은 무조건 맞는 방법이라 할 수 없다. 각 커밋에 무조건 적인 rebase보다는 중요한 커밋들을 관리한다는 측면에서 확실한 강점이 있다.
rebase?
C3에서 변경된 사항을 Patch로 만들고 이를 다시 C4에 적용시키는 방법이 있다.
Git에서는 이러한 방식을 Rebase 라고 한다.
rebase 명령으로 한 브랜치에서 변경된 사항을 다른 브랜치에 적용할 수 있다.
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
위 그래프에서 보면 client의 C8과 C9를 server 하위의 branch로 작업하다가 master로 바로 진행하고 싶을때 아래와 같은 명령어로 합칠 수 있다.
$ git rebase --onto master server client
위의 명령어를 입력하여 진행하면 아래와 같은 그래프 모습을 볼 수 있다.
위의 내용은 꽤나 유용하게 사용될 수 있다. 물론 server를 거쳐서 merge를 시키고 master로 진행할 수 있지만 단계를 지나고 상황에 따라 위와 같이 바로 master로 합쳐져야 할 경우 rebase를 이용하여 유용하게 결과를 볼 수 있다.
rebase의 주의사항
rebase는 장점이 많은 기능이지만 주의할 사항이 있다.
이미 공개 저장소에 Push한 commit을 Rebase하지 마라
rebase는 기존의 커밋을 그대로 사용하는 것이 아닌, 내용은 같지만 다른 커밋을 새로 만든다.
새 커밋을 서버에 push하고 해당 내용을 누군가가 pull받아서 사용하여 작업할 경우 push한 내용에 있어서 rebase를 하게 된다면 pull을 받은 누군가가 push를 했을때 다시 merge를 해야한다. 또한 merge를 한 내용을 내가 pull을 받을 경우 나의 코드는 엉망이 된 상황을 발견할 수 있다.
rebase를 사용하면서의 관점
rebase를 사용하면서 봐야 할 관점은 바로 작업 내용에 있어서 얼마만큼의 히스토리를 관리할 것인가 문제이다.
- merge와 함께 rebase는 공존하는 관계이다.
- merge를 통해 작업을 합치고 관리하는 기본적인 툴이라는 관점에서 본다면
- rebase는 얼마나 그 merge를 통해서 이뤄지는 커밋들을 얼마나 중요 내용을 핵심적으로 관리하며 커밋 히스토리를 쌓을 것인지에 대한 매니저 역할을 한다.
- 커밋 히스토리는 프로젝트를 전반적으로 파악할 수 있고 모든 시점을 확인하는 중요한 지표인 만큼 rebase를 통한 관리는 필수적이다.
프로젝트에 적용해보기
1. 우선적으로 기본적인 진행은 이전 Git블로그 글과 유사하다.
2. 추가적인 내용은 아래와 같다.
git checkout -b [branch name] --track upstream/[branch name]
2-1.
위와 같이 commit이뤄지는 과정에서 해당 부분을 rebase 시켜준다.(사진에 오타가 있으므로 아래의 명령어를 참고하길)
git pull --rebase upstream [branch name]
참고
'etc' 카테고리의 다른 글
fork repository 최신화 상태 유지하기 (0) | 2021.03.06 |
---|---|
Jira를 통해 스크럼 관리하기 (0) | 2021.02.24 |