TIL-22. git rebase 및 conflict 해결

solarrrrr·2021년 11월 21일
0

Today I Learned

목록 보기
22/74
post-thumbnail

프로젝트 진행 중 종종 컨플릭트가 발생한다.
git pull로 받아온 코드의 최신화 상황이
작업자마다 각각 달라서 push 할 때 충돌이 발생하게 되는데
1차 프로젝트 때는 git merge로 해결했었고
2차 프로젝트 때는 git rebase를 사용하고 있다.

merge나 rebase나 브랜치를 병합해 주는 기능이지만
차이가 있다.

merge의 경우 커밋의 정리 없이 그냥 브랜치를 합쳐준다.
그렇기 때문에 작업자가 많을수록, 브랜치와 커밋들이 많을수록
많이 섞이고 뒤죽박죽 되기 쉽다.

반면에 rebase의 경우 용어에서도 보이듯이
기준점을 새롭게 잡아준다.

merge가 여러 작업자들의 여러 브랜치와 커밋들을
같은 선상에서 합쳐준다면
rebase는 기존 커밋 아래로 이어붙여준다.

이 과정에서 커밋들을 정리할 수가 있기 때문에
history가 깔끔하게 유지될 수 있게 된다.

현재 위코드에서는 2차 프로젝트에서 rebase를 사용 중이고
무조건 커밋은 1개만 존재하도록 정하고 있다.

이렇게 하니 내가 보기에도, 다른 작업자의 내용을 보기에도
간결해 보이고 좋은 것 같다.

다만 무조건 rebase만 사용하는 건 아니고
상황에 따라 merge와 rebase를 혼용해 사용한다고 하는데

일단 지금 배우고 쓰고 있는 rebase의 기본 사용 방법을
간략하게 정리해 보고자 한다.

작업을 하고 push 하기 전에 현재 작업 브랜치에서
git rebase -i main을 진행한다.

해당 브랜치에서 작업한 커밋들이 나오는데 가장 위에 것을
pick 상태로 두고 아래쪽 커밋들을 s 혹은 squere로 바꾼다.

wq로 저장하고 나오면 커밋을 정리할 수 있는데
원하는 커밋을 1개 남기고 나머지는 지워준다.

그리고 다시 wq로 저장하고 나면 끝이다.

만약 conflict가 난 상황이라면 rebase가 일지중지되고
터미널 프롬프트가 커밋의 이름으로 바뀌게 되는데

conflict를 해결한 후 git rebase --continue를 해 주면
남은 rebase 작업을 마무리하게 된다.

그리고 push 할 때 명령줄 마지막에 -f 붙이면 된다(포스 푸시?)

!! main은 깃헙으로부터 최신화된 코드를 pull 하는 용도 외엔
어떤 편집이나 작업을 하지 말자.

profile
몰입

0개의 댓글