1. Git Rebase 사용해보기

평소에는 masterbranch에서 새로운 branch를 만들어서 작성을 하다가 기능이 완성되면 master에서 merge를 하는 방식으로 개발을 했었는데, 이번에 팀원들과 프로젝트를 진행하면서 rebasesquash issue를 사용해서 좀 더 깊이 있게 사용해보려고 합니다.

1.1 Rebase란 ?

re + base말 그대로 base를 재설정 한다는 의미입니다.

참고사이트

image

위와 같이 master branch와 3개의 commit객체가 있는 상황에서

git checkout -b dev 

위 명령어를 통해서 새로운 dev branch를 만들고 dev branchcheckout을 하고, 커밋 명령어를 통해서 2번 commit을 했다고 가정해보겠습니다. 그러면 아래와 같은 그래프를 가질 것입니다.

image

위 상황에서 dev branchmaster branch로 병합하는 명령어를 실행해봅니다.

git checkout master
git merge dev

1567163201108

commit2를 가르키고 있던 master branch가 merge를 통해서 fast-forward되어서 dev와 같은 branch를 가리킵니다.

이렇게 보면 merge만 사용해도 이상적인 commit graph를 나타낸다고 생각할 수 도 있습니다. 하지만 제가 branch를 만들어서 작업을 하는 도중 팀원이 커밋을 진행했을 경우 아래와 같은 그래프를 나타납니다.

image

위 상황에서 mastercheckout을 해서 merge를 해주게 되면 그래프가 복잡해지는 상황이 나옵니다.

git checkout master
git merge dev

1567163388599

이렇게 하게되면 fast-forward가 아닌 새로운 merge commit을 남기게 됩니다.

2. Rebase

그렇다면 rebase를 사용하면 어떻게 되는지 확인해보겠습니다.

1567163406817

글의 처음에서 얘기했듯이 rebase란 base를 다시 지정하다라는 의미입니다. 현재 dev branch의 root는 commit2로서 master가 가르키고 있는 commit보다 뒤에 위치합니다.

여기서 아래와 같은 명령어를 사용해봅니다.

git checkout dev
git rebase master

위 명령어는 dev branch의 base를 master로 사용하겠다는 의미입니다.

1567163420191

그러면 위와 같은 형태의 그래프가 나타나게 됩니다.


3. 내 프로젝트에 적용해보기

제가 하는 프로젝트는 master 밑에 develop branch를 사용하기 때문에 develop을 기준으로 작성하려고 합니다.

  1. branch 확인하기

    git branch -a
    
  2. develop branch로 checkout 하기

    git checkout develop
    
  3. 원하는 feature/작업명 branch만들기

    git checkout -b feature/작업명 
    
  4. 작업 후 commit 하기

    git add .
    git commit -m "mansub | 커밋명"
    
  5. 원격 develop에서 pull하면서 rebase받기

    git pull --rebase origin develop
    
  6. 원격 feature branch에 push 하기

    git push origin feature/작업명
    
  7. dev branch 에 checkout 하기

    git checkout develop
    
  8. 내가 rebase 해서 갱신된 develop을 local develop에 pull하기

    git pull origin develop
    
  9. 작업했던 feature branch 삭제하기

    git branch -D feature/작업명
    
  10. 삭제했다는 것을 원격에 알리기

    git push origin --delete feature/작업명