Git - Rebase

Soojeong Lee·2021년 7월 21일
0
post-thumbnail

git merge 명령어 대신 git rebase 사용기

Goal

  1. Git flow가 어떤 방식으로 운영 되는지 알고, main, develop, feature, release, hotfix 브랜치를 각각 구분하여 설명할 수 있다.
    👉🏻 프로덕션 레벨의 코드도 개발 코드와 분리해서 관리해야하기 때문에 깃 브랜치 관리 전략이 생겨났고 이것은 = git flow이다.

    👉🏻 메인, delvelop가 큰 줄기이다. feature, release, hotfix는 기능단위 브랜치, 출시를 앞둔 브랜치, 급하게 오류를 잡는 브랜치이다.

  2. branch를 병합하는 두 가지 방식인 rebase와 merge의 차이점에 대해 설명할 수 있다.
    👉🏻 rebase : 브랜치 + 브랜치 명령어 => main의 최신 업데이트 상태의 뒤로가서 붙는다.
    👉🏻 rebase를 사용하면 leaner한 이력관리가 가능해진다.
    👉🏻 불필요한 merge 커밋이 없다. history 이력은 사라지는 점을 참고해야한다.
    👉🏻 rebase 명령어를 사용하여 불필요한 커밋을 하나로 squash 할 수 있다.

branch

branch를 생성하는 이유?
코드가 서로 섞이지 않게 하기 위해서이다. 메인은 신성하니까...!

위에 짧게 기술하였지만, develop(개발단계)의 코드와 main을 나누어야한다. 왜냐하면 main에서 개발을 하다보면, 실제 사용하는 사용자들이 개발을 하는 단계에서 발생한 문제 때문에 이용을하지 못하기 때문이다.

feature

큰 기둥 브랜치 2개는 develop, main이다. 기능 단위의 브랜치인 feature는 main에서 합치는게 아닌 develop에서 합친다.

Release

develop단계가 완료되면 Release브랜치로, 그 후 main에서 합친다.

hotfix

hotfix의 정의
: 핫픽스(영어: hotfix)는 제품 사용 중에 발생하는 버그의 수정이나 취약점 보완, 또는 성능 향상을 위해 긴급히 배포되는 패치 프로그램

main에서 바로 따서 급하게 고치는 것. 따라서 나중에 develop 브랜치에 Merge 시켜를 시켜준다.

Merge VS Rebase

Git - MERGE

history가 중요한 경우 사용하는 명령어.
서로 다른 브랜치가 병합될 경우, 커밋 남긴 시점 사이사이에 들어와서 merge가 되고 merge commit이 맨 뒤로 온다.

Git - REBASE

깔끔한 이력 관리를 위한 명렁어.
베이스 커밋의 위치를 다시 잡는다. 한쪽에 있는 브랜치를 다른 브랜치에 병합하는 것. Rebase는 이력을 깔끔하게 정리할때 사용할 수 있는 장점이 있다.

이 때, commit을 하면서 3-4개가 쌓이면 squash를 해서 정리해야한다. 너무 많은 커밋이 쌓이면 충돌이 커밋 개수만큼 일어나기 때문이다..! 방법은 아래와 같다.

  1. 터미널에 아래와 같은 명령어를 입력한다.
git rebase -i main

여기서 i는 ?
-i : interactive

  1. 명령어를 입력하면 아래와 같은 창이 뜬다.

커밋 메세지의 구조는 아래와 같다.

pick 커밋해쉬 커밋메세지

👉🏻 여기서 첫번째 메세지는 그대로 두고
👉🏻 두번째 메세지부터 pick 대신 s를 입력한다

TMI 나는 s대신-s를 적어서... 안됐었다..ㅎㅎ 다시
git rebase —-abort를 입력하고 다시 되돌려서 s만 입력한뒤 :wq로 저장하고 커밋 메세지를 제외한 나머지를 저장한다.

Squash
: s 커밋을 하나로 합치는 명령어

추가로, 내가 최종 push한 PR 이후에 수정사항(commit 4)이 생긴다면,
그 이후 main에서 pull 받고 commit 4를 추가해준다.

이후 push를 진행하게되면 main에 있는 브랜치와 다른 commit을 가지고 있기 때문에 push가 거절된다.

이때 push뒤에 -f를 붙여서 force한다. 기본적으로 쓰지 않지만 push 올라가 있는거랑 똑같고, 내가 명확히 commit4만 추가만 된거 아니까 이런 경우에는 -f를 사용한다!

즉, 내가 아는 내용에 한하여 리베이스에서 추가 수정은 -f 하면된다.

Git rebase 충돌

충돌 발생 시, 에디터에서 충돌 해결 후 git add . → git rebase —continue 반복하면된다. commit은 필요하지 않다.

git add .
Git rebase --continue

아직 merge가 더 익숙하지만 새로운 방법인 rebase를 사용하면서 어떤 부분에서 각자 장단점을 갖는지 체험해보아야겠다 ! 🏔

profile
🍼 newbie frontend developer

0개의 댓글