
미니 프로젝트를 진행하면서 github로 진행을 했는데
develop 브랜치에서 pull 해오지 않고 commit을 해버리면서 병합충돌이 발생했다.
충돌이 발생한 이유를 순서에 따라 정리해보자면
🔍 병합 충돌이 발생한 이유
- feat/result 브랜치에서 작업 중
- develop 브랜치에서 변경된 내용이 있었음
- 그런데 feat/result에서 작업을 마친 후, develop을 먼저 pull 하지 않고 push를 시도함
- 나중에 develop을 pull 하려 하면서 두 브랜치 간 공통 조상 이후로 변경된 내용이 서로 달라 충돌 발생
이렇다.....
push를 하기전에 develop 브랜치에 변경사항이 있었기 때문에 pull 먼저 해왔어야됐는데 깜빡하고 내 브랜치에서 push 부터 해버린것이다.
이때 다행히도 우리팀은 협업을 진행하면서 각자 다른 파트를 담당했기 때문에 왠만하면 다른 파일을 수정해서 내가 아직 commit하지 않은 코드들이 날아갈 위험도는 적다. (그래서 pull해와도됨 불안하면 git stash 통해서 임시저장 하는게 좋음)
아무튼 이 충돌을 해결하기 위해서
git config pull.rebase true
git pull origin develop
이 두개를 순서대로 실행해주면 된다.
그러면 내 작업 커밋들을 develop 위로 "재배치" 하게된다.
이때 충돌이 발생을 하면 충돌 편집기를 통해서 수동으로 충돌을 수정해주고
git add [충돌한 파일 이름]
git rebase --continue
이렇게 충돌했던 파일을 스테이징 해준 후에 다시 rebase를 진행해주면 된다
이때 또 충돌이 발생하면 편집기에서 수정하고 위에 두 코드 다시진행 (충돌 사라질 때까지)
이렇게 충돌이 해결 되면 다시 내 브랜치에서 push 해주면 된다
github로 협업하는 거는 항상 너무 어려운 것같다...
아래는 정석대로 했어야할 병합 순서이다. (다음엔 잘 지켜야지..)
git stash # 변경 사항 임시저장
git checkout develop
git pull origin develop
git checkout feat/result
git stash pop # 변경 사항 다시 적용