본문 바로가기
etc

아름다운 Git commit 그래프, Rebase 이 친구의 이야기

by upswp 2021. 3. 14.

서론

git을 관리하다보면 다양한 사람들과 함께 형상관리를 위해서 노력하는 일에 가장 많은 고민과 노력을 하게된다. 또한 올바른 형상관리는 단순히 프로젝트를 진행하며 생기는 변수에 대응하기 위한 수단이 아닌 프로젝트의 전체적인 과정을 확인하고 탄탄한 개발을 진행하는 밑거름이 된다.

 

git을 관리하며 흔히 말하는 git flow 방식을 많이 사용을 한다. 이 부분에서 많은 branch가 사용이되고 나눠지고 합쳐지는 단계를 반복하며 하나의 멋진 프로젝트가 생성이 된다.

 

커밋 그래프를 단순하게 가져가고 의미있는 커밋들을 관리하기 위해서는 커밋 그래프가 한 눈에 들어오는 일은 분명 중요하다. 오늘은 그 목표를 이루기 위한 rebase에 대해서 알아보고자 한다.


본론

[우아한 형제들] 기술블로그 Git-flow 설명에서 참고

위와 같이 프로젝트를 진행하며 생기는 흔한 커밋 그래프이다.

하지만 위와 같은 커밋 그래프는 형상관리의 흐름을 파악하기 어려운 그래프이다. 위의 그래프에서 rebase를 통해서 간편해지는 그래프를 확인해 보겠다.

 

[우아한 형제들] 기술블로그 Git-flow 설명에서 참고

위와 같이 다양한 커밋들을 하나의 커밋으로 관리하며 그래프가 간단해지는 모습을 볼 수 있다. 

 

물론, 위와 같이 다양한 커밋들이 하나의 커밋으로 합쳐지는 부분은 무조건 맞는 방법이라 할 수 없다. 각 커밋에 무조건 적인 rebase보다는 중요한 커밋들을 관리한다는 측면에서 확실한 강점이 있다.

 


rebase?

git-scm.com 참고

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

git-scm.com 참고

위 그래프에서 보면 client의 C8과 C9를 server 하위의 branch로 작업하다가 master로 바로 진행하고 싶을때 아래와 같은 명령어로 합칠 수 있다.

$ git rebase --onto master server client

위의 명령어를 입력하여 진행하면 아래와 같은 그래프 모습을 볼 수 있다. 

git-scm.com 참고

위의 내용은 꽤나 유용하게 사용될 수 있다. 물론 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블로그 글과 유사하다.

 

 

fork repository 최신화 상태 유지하기

서론 github에서 fork하여 사용하는 이유는 다양하다. 단순히 해당 소스를 본인의 repository로 가져와서 가공 또는 활용해보고싶은 열정! 개인 프로젝트를 진행하며 master repository에서 fork를 하여 프

upsw-p.tistory.com

2. 추가적인 내용은 아래와 같다.

git checkout -b [branch name] --track upstream/[branch name]

2-1.

위와 같이 commit이뤄지는 과정에서 해당 부분을 rebase 시켜준다.(사진에 오타가 있으므로 아래의 명령어를 참고하길)

git pull --rebase upstream [branch name]

 


참고

 

Git - Rebase 하기

Git에서 한 브랜치에서 다른 브랜치로 합치는 방법으로는 두 가지가 있다. 하나는 Merge 이고 다른 하나는 Rebase 다. 이 절에서는 Rebase가 무엇인지, 어떻게 사용하는지, 좋은 점은 뭐고, 어떤 상황에

git-scm.com

 

 

우린 Git-flow를 사용하고 있어요 - 우아한형제들 기술 블로그

안녕하세요. 우아한형제들 배민프론트개발팀에서 안드로이드 앱 개발을 하고 있는 나동호입니다.오늘은 저희 안드로이드 파트에서 사용하고 있는 Git 브랜치 전략을 소개하려고 합니다. ‘배달

woowabros.github.io

 

'etc' 카테고리의 다른 글

fork repository 최신화 상태 유지하기  (0) 2021.03.06
Jira를 통해 스크럼 관리하기  (0) 2021.02.24