#38 Git - Rebase 3/3

김현준·2022년 12월 29일
0

GIT

목록 보기
38/41

이번시간에서 rebase 를 일부로 충돌을 내고 그 과정에서 어떻게 rebase 가 동작하는지 알아보고 그것을 해결하는 방법에 대해 알아보겠습니다.

그리고 rebase 를 사용할때는 다른사람과 공유하지않은 commit 들에 대해서만 사용해야합니다.

git pull 을 통해 파일을 다운 한 다음에 rebase 를 적절하 시용하고 마지막에 git push 를 하는겁니다. 이제 알아봅시다.

rebase 디렉토리를 재생성하고 저장소로 만들어줍니디.

이후 f1.txt 를 생성해서 addcommit 을 해줍니다.

rb 라는 새로운 branch 를 만들어 주고 그곳에서 f1.txt 를 수정한 후에 commit 을 했습니다.
이후 git log --decorate --all --oneline --graph 를 통해 현재 상태를 확인 할 수 있습니다.

다시 master 로 이동하고 f1.txt 의 파일을 수정한 후에 commit 을 하겠습니다.

이후 git log --decorate --all --oneline --graph 를 통해 현재 상태를 확인 할 수 있습니다.

즉 이제 masterrb 는 서로 다른 길을 가기 시작했습니다.

그리고 중요한 것은 두 커밋에서 똑같은 부분을 수정했기 떄문에 병합을 하면 충돌이 날 수밖에없다는 것입니다.

rebase 에서 충돌은 많이 복잡하기 때문에 일단 commit 을 좀더 해보겠습니다.

rb 로 이동해준 후에 f1.txt 를 한번더 수정하고 commit 해줍니다.

또 한번더 수정하고 commit 을 하면 아래 화면과 같이 상태가 변하게 됩니다.

rbR1 , R2 , R3 라는 3개의 commit 을 가지고 있고 masterM1 을 최신 commit 으로 가지고 있고 현재 전부 같은 부분을 수정했기 때문에 병합을 할 시 필연적으로 충돌이 발생합니다.

이때 git rebase master 가 가지는 의미가 무엇일까요? rbbase 는 커밋메세지가 11 인데 master 의 최신 commitM1 으로 base 를 바꾸겠다는 의미입니다.

그러면 R1commit 은 부모가 11 이 아니라 M1 이 되고 rbmaster 가 작업한 내용을 포함하게 됩니다.

그리고 rebase 사용시 R111 사이에있는 소스코드의 차이점만 가지고 있는 정보들이 임시저장소에 저장됩니다. 이후 R1R2 , R3 가 저장됩니다.

이후 임시저장소에 보관되어있는 R1M1merge 가 됩니다.

git rebase master 실행시 R1commit_id - 560e016 으로 바꾸는 것에 문제가 생겨 conflict 가 발생하게 됩니다.

f1.txt 파일을 열어보면 rb 에서 수정한 내용과 master 에서 수정한 부분이 같기 때문에 다음과 같이 파일이 변경되게 됩니다.

따라서 저는 다음과 같이 수정해보겠습니다.

수정후에 add 를 하고 git status 실행시 rebasecontinue 하라고 뜨네요. 즉 정상적으로 수정이 되었다는 뜻입니다.

git rabse --continue 로 병합을 계속 해봅시다.

하지만 다시 병합하는데 실패하였습니다. 일단 R1M1 은 정상적으로 평합이 된것을 확인할 수 있습니다.

오류가 난 이유는 R1R2 또한 똑같은 2번째 줄에서 똑같은 내용을 수정했기 때문에 오류가 발생했습니다.

즉 현재 이런상태인 것이죠

이렇게 수정해보겠습니다.

하지만 또 에러가 발생했습니다. R1 , R2 , M1 까지는 병합이 정상적으로 되었지만 R3 또한 같은 부분이 수정되었기 떄문에 conflict 가 발생했습니다.

이제 이 파일을 수정해봅시다.

이렇게 수정하겠습니다.

드디어 rebase 가 정상적으로 완료되었습니다.

git log --decorate --all --graph --oneline 을 통해 상태를 확인 해줍시다. 현재 rbmaster 의 모든 commit 내용을 담고있을 뿐만 아니라 rb 가 작업했었던 기존 내용도 담고있고 rb 가 어떤 히스토리를 가지고 있는지 분기점 없이 한 라인으로 깔끔하게 한줄로 보여줍니다.

이것이 바로 rebase 의 핵심적인 가치입니다.

지금까지 rebase 에서 충돌이 발생하는 경우와 그 해결법에 대해 알아보았습니다.

여기까지 하도록 하겠습니다.

profile
울산대학교 IT융합학부 22학번

0개의 댓글