본문 바로가기

Project Management/Git & Github

[Chapter 4] 복수의 repository로 협업(2) - rebase 1

github logo image

 

 

 

앞선 과정을 통해, NEWBIE가 본인의 포크 된 원격 저장소를 통해 "favorite.md"를 새롭게 추가한 내용까지 원본 저장소에 병합을 진행하였습니다. 

 

이제 다음 상황을 가정해 보겠습니다. NEWBIE가 추가로 favorite.md에 선물하기 기능(라인)을 추가하고 다시 풀 리퀘스트를 보냈는데 - ME가 작성한 코드와 충돌이 났습니다. 그럼 이 충돌을 해결하기 위해 우리가 앞서 배웠던 것처럼 원본의 브랜치를 내 브랜치로 병합한 다음 충돌을 해결하고 다시 풀 리퀘스트를 보내게 됩니다. 

 

하지만, 이렇게 작업을 진행한 후 풀 리퀘스트를 보낸다면 선물하기 기능 뿐만 아니라 충돌 해결 과정까지 모두 포함된 병합 커밋이 생기게 됩니다. 이 상황에서 불필요한 커밋은 제외하고 '선물하기 기능 추가' 커밋만 보내야 할 것입니다. 이제 이 상황과 해결 방법을 실습해 보겠습니다. 

 

 

 


 

 

우선, 현재는 NEWBIE로 로그인 되어 있는 상황임을 전제로 합니다. NEWBIE의 로컬 저장소에서 favorite.md 파일을 열어서 '선물하기 기능 추가'를 두 번째 줄에 작성하고 이를 저장합니다.

 

소스트리에서 NEWBIE의 상태로  NEWBIE가 작업하는 원격 저장소(study_git_NEWBIE)에 이를 커밋하고 푸시까지 진행해 보겠습니다. github 페이지에서도 정상적으로 반영되었는지 확인을 진행합시다. 

 

 

NEWBIE의 로컬 저장소에서 favorite.md 추가 수정하고

 

NEWBIE의 원격 저장소에 커밋을 push까지 진행합니다

 

NEWBIE의 원격 저장소에 반영되었습니다

 

 

 


 

 

자, 이제는 ME가 작업을 진행할 차례입니다. 일단 소스트리에서 ME 계정으로 전환한 다음, 소스트리에서 원본 저장소 탭으로 이동해 보겠습니다. 우리는 NEWBIE가 원격 저장소에서 '즐겨찾기 기능 추가'를 진행하고 이를 원본 저장소로 풀 리퀘스트를 보내 해당 커밋을 반영하는 작업을 앞선 아티클에서 진행했었습니다. 그래서 ME의 원본 저장소에도 반영이 되었죠.

 

하지만 이것은 웹 상의 ME의 원본 저장소에만 반영되었고, ME가 별다른 작업을 진행하지 않았기 때문에 ME의 '로컬 저장소(PC)'에는 이것이 반영되지 않은 상태입니다. 그래서 ME의 '로컬 저장소'는 아직 해당 커밋이 2개 전 상태인 것입니다. (ME의 로컬 저장소에는 favorite.md 파일이 없죠) 일단 이 커밋을 ME의 로컬 저장소에도 반영해 보겠습니다. 

 

[Pull]을 클릭하거나 [master] 브랜치를 우클릭하여 [가져오기 origin/master]를 클릭해 줍니다. 이제 ME의 로컬 저장소 폴더로 돌아가 확인해 보면, "favorite.md" 파일이 생겨난 것을 확인할 수 있습니다. 

 

원본 저장소에서 pull을 진행하면

 

ME의 로컬 저장소까지 반영됩니다

 

 

 


 

 

자, 여기서 ME의 로컬 저장소에 새로 반영된 [favorite.md] 파일을 열어보면 어떤 상태일까요? '즐겨찾기 기능' 한 줄만 작성되어 있습니다. NEWBIE가 본인의 원격 저장소에서 작업을 진행해 '선물하기 기능 추가'를 push까지 진행했지만, 아직 이 커밋을 원본 저장소와 병합하지 않았기 때문이죠. 

 

자, 이제 충돌 상황을 만들어 보겠습니다. 이 상태에서 ME가 자신의 로컬 저장소에서 [favorite.md]를 수정하는 상황을 가정해 보겠습니다. NEWBIE는 '선물하기 기능'을 추가해 둔 상태인데 ME는 그것을 모릅니다. 그래서 해당 파일 둘째 줄에 '포인트 지급 기능'을 추가했습니다. 

 

ME의 로컬 저장소에서 포인트 지급 기능 텍스트를 추가했습니다

 

 

위의 커밋을 원본 저장소에 반영하고, push까지 진행해 보겠습니다. 

 

ME가 원본 저장소에 포인트 지급 기능 추가를 커밋하고 push합니다

 

원본 저장소에서는 favorite.md에 포인트 지급 기능이 추가되는 작업이 완료되었습니다

 

 

마지막으로 ME의 커밋을 하나만 더 추가하겠습니다. [readme.txt]에 기존 내용에 텍스트를 추가하겠습니다. 적당히 '개발자 NEWBIE 추가' 정도를 넣겠습니다. 그리고 해당 내용을 저장하고, 커밋한 후 푸시까지 진행하겠습니다. 

 

 

 

 

 


 

 

이제 현재까지 ME의 원본 저장소와 NEWBIE의 원격 저장소 상태를 정리해 봅시다. 일단 두 저장소 모두 '즐겨찾기 기능 추가' 커밋까지는 동일합니다. 하지만, NEWBIE는 이다음 단계에 'favorite.md' 2번 라인에 "선물하기 기능 추가"가 추가되었습니다. 

 

ME는 원격 저장소에서 'favorite.md' 2번 라인에 "포인트 지급 기능 추가"가 추가되었습니다. 그리고 여기에 더해 'readme.txt'파일에 NEWBIE 텍스트도 하나 더 추가해둔 상태입니다. 이제 이 저장소에서 풀 리퀘스트가 일어난다면, 충돌이 발생하겠죠? (favorite.md 2번 라인 때문에)

 

이제 다음 아티클에서 현 상태에서 충돌을 구현하고, 해결까지 진행하겠습니다.