[book-store] merge conflict 해결

yujin·2023년 2월 22일

프로젝트

목록 보기
5/26

[2023.02.20]

오늘은 작업한 내용을 develop 브랜치에 merge했습니다.
merge conflict가 많이 발생했고, 해결이 어려워서 하루를 merge하는 데에 다 보냈습니다 ㅠㅠ
따라서 이번에는 제가 merge conflict를 해결한 과정을 기록해보려고 합니다!


📌 1. MergeRequest로 merge

문제 상황

gitLab에서 MergeRequest로 merge를 했는데 다음과 같이 Merge locally만 보였습니다!

Merge locally를 누르면 다음과 같이 해결책을 알려주는데요, 저는 이 명령어들이 에러가 나서 이 방법으로 해결할 수 없었습니다 ㅠㅠ

해결

사실, 지난번 개인 프로젝트 때에도 이와같은 상황이 있었는데 당시 rebase와 git push --force 를 이용해 해결하는 방법을 찾았었습니다 (아래 링크 참고). 그 때는 개인 프로젝트니까 이 방법을 사용해서 해결했었습니다. 하지만 이번에는 이 방법을 사용하지 않았습니다.

이유는 해결 과정이 모두 feature branch에서 이루어지기는 하지만, 팀원들과의 작업방식을 고려했을 때 강제로 push하는 것이 문제가 될 수도 있을 것 같다고 생각했기 때문입니다.

공유 브랜치에서 작업할 때는 업데이트를 강제 실행 하지 않는 것이 좋다고 합니다. 링크에 나온 방법은 모든 과정이 개인 브랜치에서 이루어지기 때문에 본인의 팀에서 서로의 브랜치를 관여하지 않는다면 rebase를 사용해도 괜찮을 것 같습니다. 하지만, 저희 팀은 중간마다 필요할 때 다른 팀원의 개인 브랜치를 본인의 브랜치로 pull해서 사용하는 경우가 있었기 때문에 강제로 push하는 게 문제가 될 수도 있을 것 같다고 생각했습니다.

따라서 저는 develop브랜치를 git pull하고 merge conflict를 해결한 후 push하는 방법으로 해결했습니다. (아래에 순서대로 작성하겠습니다.)

rebase와 git push --force 를 이용해 해결하는 방법


📌 2. git 대소문자 구별문제

문제 상황

Vscode에서 폴더명을 소문자로 바꿨는데, git에 올리면 대문자로 올라가는 이슈가 있었습니다.

해결

1.프로젝트 폴더 경로에서 git config core.ignorecase false 명령어를 입력
2.git config --local --list 명령어를 통해서 해당 옵션이 적용 되어있는지 확인

이렇게 하면 된다고 하는데, 저는 계속 저장하면 대문자로 바뀌었습니다..ㅠㅠ
(다른 팀원분들은 이 방법으로 됐다고 합니다!)

저는 이것 때문에 한 2시간은 보낸것 같은데요,,
인터넷에 나오는 모든 방법대로 해도 안됐었는데 결국 엄청엄청 간단한 방법으로 해결했습니다!
Vscode를 닫고 폴더로 직접 이동해서 바꿔준 후 다시 Vscode를 열면 제대로 반영이 되어 있더라구요...ㅎㅎ


📌 3. git pull 에러

문제 상황

merge를 위해 먼저 target-branch (develop)으로 이동하고 pull을 받았습니다!
그런데 pull을 받으려고 하니, 다음과 같은 에러가 발생했습니다.

해결

내용을 읽어보니, 해당 폴더들을 옮기거나 삭제해달라는 내용이었습니다!
각 폴더들을 살펴보니 모두 사용하지 않는 폴더이거나 다른 팀원이 작성해서 merge할 예정이었던 폴더들이었기 때문에 저는 모두 삭제해주었습니다!
다 삭제한 후 다시 pull을 받았더니 아래와 같이 잘 받아졌습니다.

pull을 받고 여러 충돌이 발생했는데요, 이는 충돌난 파일에 들어가서 병합 편집기를 통해 해결했습니다!


📌 3. merge 후 실행 에러

문제 상황

merge를 하고 실행하니 다음과 같은 에러가 발생했습니다.

해결

찾아보니 eslint와 prettier가 충돌해서 생기는 오류라고 합니다!

·· : space
␍⏎ : enter

에러에서 뜻하는 말이 위와 같다고 합니다. 따라서 발생한 에러대로 하나씩 변경해주면서 해결했습니다!
그런데 병합 후 코드를 조금 수정할 때마다 계속 위와 같은 에러가 났는데요, 설정에서 Editor:Format On Save에 체크한 후부터 나오지 않았습니다! :)


📌 4. 이름 변경한 폴더가 git에는 그대로 존재하는 이슈

문제 상황

아까 1번의 상황에서 폴더들을 소문자로 변경해주었는데요, git에서 보니 소문자로 변경한 폴더와 이전 폴더가 모두 있었습니다.

해결

검색해보니 로컬에서 변경한 후 push를 하면 git에 있는 폴더는 유지된 채 바뀐 폴더가 새로 생성된다고 합니다.이 경우 git 명령어를 통한 파일 삭제 후 push를 해주어야 합니다!

# 원격 저장소와 로컬 저장소에 있는 파일 삭제.
git rm -r [File Name]

# 원격 저장소에 있는 파일을 삭제. 로컬 저장소에 있는 파일은 삭제하지 않음.
git rm --cached -r 폴더/파일명

삭제 후 push까지 해주면 다음과 같이 git에 반영됩니다!


📌 3. 오늘 소감

merge conflict가 생각했던 것보다 많이 발생했습니다. 개인 프로젝트 때에도 main, develop, feature 브랜치로 나누어 작업했었는데, 그 때보다 코드를 병합할 때 더 충돌도 많이 났고, 혹시 몰라서 강제로 작업하는 것을 사용하지 않다보니 해결이 어려웠던 것 같습니다. 이것으로 인해 많은 시간을 보내긴 했지만, 이렇게 팀프로젝트에서 merge를 해결해보면서 git에 대해 더 공부하고 이해하게 된 것 같습니다. 또, 나중에 협업을 위해서도 꼭 필요한 내용이었다고 생각해서 의미 있는 시간을 보낸 것 같습니다.

[ 참고한 블로그 ]
1. eslint와 prettier가 충돌해서 생기는 에러
2. Github에 잘못 올라간 파일 삭제하기

0개의 댓글