[Git] merge/rebase

Hyeonsik Bae·2022년 9월 17일
0
post-thumbnail

개발을 하다 보면 브랜치를 나눠서 작업을 하게 됩니다.

개발을 처음 접했을 땐 pull, add, commit, push만 사용하고도 작업이 가능했습니다.

기능 개발, 리팩토링, 디버깅 등을 브랜치로 나눠서 작업을 할 때도 큰 문제가 없었습니다.

하지만 협업을 하게 되니 main branch 병합에 충돌이 자주 일어났습니다.

merge

merge는 브랜치를 병합할 때 사용합니다.

다음과 같이 브랜치가 있습니다.

main 브랜치에서 아래와 같은 명령어를 통해 다른 브랜치를 병합할 수 있습니다.

git merge [merge할 브랜치명]

이 때, merge를 되돌리고 싶은 경우 아래와 같이 취소할 수 있습니다.

git merge --abort

| reset, revert 등을 사용해서 되돌릴 수도 있습니다.


위 브랜치들을 병합하면 아래와 같이 시계열대로 나타나는 커밋로그를 확인할 수 있습니다.

이 때, 병합하는 커밋로그가 main 브랜치의 HEAD가 됩니다.

만약 여러 인원이 협업을 하게 되면 많은 브랜치가 엉키는 히스토리를 보게 됩니다.

이를 깔끔히 해결하는 방법이 rebase입니다.


rebase

rebase는 브랜치의 베이스를 다시 정렬합니다.

아래 명령어를 통해 현재 브랜치의 베이스를 지정합니다.

git rebase [베이스로 지정할 브랜치명]

위에서 merge 했던 것처럼 세 개의 브랜치를 만들었습니다.

하지만 merge 전, main 브랜치로 rebase 한 다음 merge를 하겠습니다.

git checkout rebase
git rebase main
git checkout main
git merge rebase

위와 같이 rebase를 사용하면 fast-forward merge가 된 것을 확인할 수 있습니다.

히스토리가 시계열대로 남진 않지만 깔끔한 커밋 이력이 남게 됩니다.

하지만 rebase는 이전 커밋 히스토리를 변경하므로 주의가 필요합니다.


어떤 방법이 더 좋다고 할 순 없겠지만, 상황에 따라 적절한 방법을 택한다면 좋은 커밋 이력 관리를 할 수 있을 거라고 생각합니다 :)

profile
현식 :)

0개의 댓글