[01 들어가기에 앞서 ]
- 엘리스에서는 git 협업을 위한 플랫폼으로 GitLab을 사용한다.
- 1,2,3차 프로젝트 모두 GitLab을 사용했지만 항상 local에서 pull로 직접 conflict를 하나하나 해결하며 merge하거나, 충돌이 나지 않을만한 작업만 웹페이지에서 직접 Merge Request로 요청하고 merge 버튼을 눌렀었다.
- 그런데 이번엔 그렇게 하지 못할 상황이 있었으니..!
- 내가 작업한 back-webpush 브랜치는 front 코드 수정 부분도 포함되어 있어서 conflict가 날 것 같았는데 매주 코치님의 코드 리뷰를 위해 GitLab에서 직접 MR을 요청해야 했다.
- 그리고 코치님께서 코드 리뷰를 잘 작성해주시고 merge를 하려고 보니 front분들이 먼저 dev로 merge하셔서 나의 MR은 conflict가 있다며 dev로의 merge 버튼이 비활성화되어 있었다.
- 이 때 아래처럼 Resolve conflicts 버튼이 있다면 GitLab GUI로 해결 가능한데 VSC 환경보다 불편하기도 하고 conflicts가 많은 경우는 Merge locally 버튼만 있는 것 같았다.
- 따라서 이번엔 Merge locally로 conflict를 해결하고 작성하는 포스팅이다.
[02 Merge locally ]
- 먼저 위의 상황에서 Merge locally 버튼을 누르면 다음과 같이 안내해준다.
(1) Fetch and check out the branch for this merge request
- 나는 아무것도 모르기 때문에(?) 일단 시키는대로 해보기로 했다.
- 그런데 두 번째 명령어를 치자 다음과 같이 "back-webpush" 브랜치가 이미 존재한다는 에러 메세지가 떴다.
- 당연하지, 내가 지금까지 써온 브랜치인걸? 하며 구글링을 해보니 merge용 브랜치를 따로 만들어서 진행하는게 좋다는 글을 봤다. (참고)
git fetch origin
git checkout -b "back-webpush" "origin/back-webpush"
- 따라서 바로 브랜치명을 바꿔 다음과 같이 입력했다.
git checkout -b "back-webpush-merge" "origin/back-webpush"
(2) Review the changes locally
- 나는 코치님의 코드 리뷰를 GUI를 통해 받았지만, 순서에 따르면 이 단계에서 local로도 코드 리뷰를 할 수 있나보다. 알아두고 나중에 써먹어봐야겠다.
(3) Merge the branch and fix that any conflicts come up
- 그리고 다음으로 안내해 준 명령어 3가지를 실행했다.
git fetch origin
git checkout "dev"
git merge --no-ff "back-webpush-merge"
- 그리고 이제 다음 명령어는 "충돌을 해결하고" 다시 dev에 push하는 것인데 문제는 conflict가 하나도 없이 말끔히 들어가버렸다?! GitLab에서는 분명 충돌이 있으니 local에서 해결하라고 했는데...!
- 이게 무슨일인가 싶어 급하게 front분을 불렀다. 그리고 확인해보니 front가 최신 코드가 아니란다.
- 어쩐지 소스 제어 탭에 dev에서 pull 해올게 70개쯤 있다고 알려주더라. 그제서야 의미를 깨닫고 dev 브랜치에서 git pull 명령어를 실행했다.
- 그랬더니 와다다다 들어오면서 conflict가 세 군데에서 발생했다! conflict가 반가울줄이야
git pull // conflict가 발생하지 않았을 경우
- 내가 수정한 front쪽 파일이 맞아서 아 뭔가 잘되고 있구나 하며 conflict를 해결했다.
(4) Push the result of the merge to GitLab
- 그리고 떨리는 마음으로 156개의 commit을 push했더니..!
git push origin "dev"
- 웹훅으로 연결해 둔 깃랩에서 다음과 같은 메시지가 왔고 GitLab MR 페이지에서도 merge가 잘 완료된 것을 확인했다.
[03 명령어 의미 ]
- 일단 해결하고 명령어를 알아보는 게 웃기지만 포스팅 하는 김에 이제라도 알고 넘어가자.
- 사실 저기에 무슨 commit 식별 번호처럼 MR 번호를 사용한 것도 아닌데 저 MR인줄 알고 닫힌게 신기했다.
- git fetch origin : origin이라는 remote 저장소의 데이터로 로컬 저장소 내용을 업데이트 -> 나는 이걸 dev 브랜치에서 했어야 했는데 back-webpush 브랜치에서 실행했다.
- git checkout -b "new branch name" "source branch" : 새로운 브랜치를 생성하고 그 브랜치로 체크아웃 (참고) -> 따라서 이미 존재하는 branch라는 오류가 난 것
- git merge --no--ff : ff는 fast-forward의 약자이고 --no--ff 옵션을 사용하면 fast-foward 관계인 경우에도 반드시 병합 커밋을 만듦(merge commit과 이력을 반드시 남기는 것) (참고)
- 그런데 이상한 점은, 지금은 내가 만든 back-webpush-merge 브랜치가 보이지 않는다. 따라서 --no--ff 옵션과 함께 merge를 하면 병합된 branch는 삭제되나 했는데 그것도 아닌 것 같다. 그럼 back-webpush-merge는 어디간거야?
- 이번 기회에 git과 한 발자국 가까워졌다고 생각했는데.. 글쎄....🤔
'엘리스 AI트랙 4기 > 프로젝트' 카테고리의 다른 글
[PWA] manifest.json 파일 설정으로 웹앱 홈 화면에 추가하기 (0) | 2022.06.29 |
---|---|
[TypeScript] morgan & winston으로 로그 남기기 (0) | 2022.06.28 |
[JavaScript] UTC 날짜, 시간 계산 (0) | 2022.06.25 |
[Ubuntu] MySQL 서버 시간 & [Nodejs] Sequelize 타임존 변경 (0) | 2022.06.24 |
[Nodejs] nodemailer를 이용한 gmail 전송하기 (0) | 2022.06.23 |