현재 상황: 과거 마스터에서 뻗어나온 미혜님 마스터와 대리님 yearlyCalendar 브랜치가 있습니다.
대리님 yearlyCalendar에 미혜님 마스터 브랜치의 코드가 첨부되야하는데 그렇지 않아서 현재 문제 상황입니다.
이를 해결하는 방법이 2개 있습니다.
1. merge: 대리님 코드에 미혜님 master 브랜치 코드를 가져와서 붙입니다.(대리님 커밋 위로 새로운 커밋을 쌓아갑니다.)
2. rebase: 대리님 커밋의 마치 미혜님 master 코드가 있었던것처럼 대리님의 커밋들을 대체합니다.(과거의 커밋을 수정합니다.)
일단 대리님 브랜치에서 아래와 같이 칩니다.
git rebase master
영어가 많지만 2가지만 보면 됩니다.
1. CONFLICT
: 대리님과 미혜님 코드에서 둘다 작성되어서 충돌이 난 부분입니다.
다행스럽게 여기선 front/pages/index.js
한파일밖에 없다고 나오네요
2. git rebase --continue
: conflict가 다 해결되면 이 명령어로 rebase를 계속 해줍니다
이제 충돌된 파일에 들어가겠습니다. (front/pages/index.js)
여기서 HEAD
는 미혜님의 코드, ADD YearlyCalendar
는 대리님의 코드(커밋명)입니다.
위 사진의 구성을 살펴보면
<<<<<<HEAD
미혜님 코드가 여기 써있습니다.
미혜님의 코드가 끝났습니다.
========
대리님의 코드가 써있습니다.
대리님의 코드가 끝났습니다.
>>>>>>>> Add YearlyCalendar
저는 저 코드중 어느걸 지워야 되는지 몰라서 제홍에게 물어보면서 중복 되는것만 지우고 두쪽 다 살려두었습니다. 현업에서는 한쪽이 마음대로 지워버리면 싸움이 난다고 합니다.
자 이제 충돌된 부분을 전부 지워서 깔끔하게 한 파일로 만들었습니다.
이상태에서 바로 git rebase --continue를 쳐버리면 conflict한 파일을 merge까지 한후에 continue를 하라면서 에러가 납니다.
여기서 merge는 우리가 알던 브랜치 머지가 아니라 그냥 conflict 고쳤다고 알려주는 수준인데요
그냥 git add <컨플릭트 수정완료된 파일>
하시면 됩니다.
머지(add) 전에 이렇게 unmerged paths라고 하면서 빨갛게 나오던 파일이
add를 하니깐 이렇게 사라졌습니다.
이제 아래의 rebase continue를 해주면 rebase가 끝납니다.
git rebase --continue
이거는 리베이스 전 깃 상황(미혜님 마스터를 아직 pull하기 전이라 origin/master를 보시면 됩니다.)
이거는 리베이스 후 깃 로그 입니다.
여기서 미혜님 마스터의 최근 커밋 (64f563f)까지는 커밋이 같은데 그 이후의 커밋ID가 변경된것을 확인하실 수 있습니다.
팀프로젝트 하는 중인데 팀원이 풀리퀘를 올려 마스터가 변경될 경우
제 브랜치에는 해당 사항이 반영이 안되어 사용하는데 불편함이 있었습니다.
근데 git rebase를 사용해보니 너무 편하네요.
제 브랜치에서 git rebase master로 정리했습니다.
그리고 머지나 리베이스 시 conflict가 일어날 때 어느 부분이 누구 코드인지 헷갈리는데
보기 쉽게 작성해주셔서 편했습니다.