PR 충돌 해결하기

jane·2021년 11월 25일
0

Git/Github

목록 보기
6/7

야곰아카데미에서 그룹 프로젝트를 하다가 야곰아카데미 repository의 브랜치에 우리가 작업한 브랜치를 머지하기위해 PR을 보냈지만 충돌이 일어났다.
구체적인 상황은 아래와 같다.

상황

  1. yagom-academy:4-hwangjeha 에는 지난 주에 작업한 허황의 개인 프로젝트가 머지되어있는 상황
  2. 모둠 프로젝트로 허황의 repository에서 hwangjeha:4-najahwang-group 브랜치를 생성하여 모둠원들의 코드를 합쳐서 커밋을 했고, yagom-academy:4-hwangjeha 에 머지를 하기위해 PR.
    • 4-najahwang-group 브랜치는 야곰 레포 원본을 분기해서 만듦
    • 4-najahwang-group 브랜치에 계산기 프로젝트 코드 병합 후 야곰 레포의 4-hwangjeha 브랜치에 PR 요청
  3. 충돌이 일어남
    (충돌이 일어났을때 상황은 미처 캡쳐못함)

원인.

야곰 레포의 4-hwangjeha 의 커밋보다 허황 레포의 4-najahwang-group 커밋이 한참 뒤쳐져있어서 충돌이 일어난듯하다.

따라서, 허황 레포에서 개인 프로젝트한 4-hwangjeha 브랜치와 모둠 프로젝트한 4-najahwang-group 브랜치 간의 충돌을 해결하고

다시 야곰의 4-hwangjeha 브랜치에 PR해서 상황을 해결함

해결책

  • 콘이 보내준 해결책
    허황 레포의 로컬에서 충돌을 일부러 일으켜서 해결후 커밋까지하고, 원격 4-najahwang에 푸시하는 방식
git checkout -b hwangjeha-4-najahwang-group 4-hwangjeha
git pull [https://github.com/hwangjeha/ios-calculator-app.git](https://github.com/hwangjeha/ios-calculator-app.git) 4-najahwang-group
  1. 로컬에 새로운 브랜치(hwangjeha-4-najahwang-group)를 만드는 동시에 4-hwangjeha 를 가져와서,
  2. 1의 브랜치에서 4-najahwang-group 를 풀 받는다. (일부러 충돌을 냄)
  3. 소스트리로 충돌난 파일의 헤드들을 지워서 충돌 해결후 1의 브랜치인 hwangjeha-4-najahwang-group 에 커밋
  4. 3을 원격 브랜치인 4-najahwang에 푸시
  5. 야곰 레포의 4-hwangjeha에 머지

구체적 상황 해결 방법

소스트리에서 상황을 해결하려했지만,

Merge branch '4-najahwang-group' of https://github.com/hwangjeha/ios-calculator-app into hwangjeha-4-najahwang-group

# Conflicts:
#	Calculator/Calculator.xcodeproj/project.pbxproj
#	Calculator/Calculator/Base.lproj/Main.storyboard
#	Calculator/Calculator/Extension/Double+Extension.swift
#	Calculator/Calculator/Extension/String+Extension.swift
#	Calculator/Calculator/Model/CalculatorItemQueue.swift
#	Calculator/Calculator/Model/ExpressionParser.swift
#	Calculator/Calculator/Model/Formula.swift
#	Calculator/Calculator/Model/Operator.swift
#	Calculator/Calculator/ViewController.swift
  1. 충돌난 모든 파일에서 우클릭하여 파인더에서보기 → 엑스코드창을 켜서 head ~ === 부분을 일일이 삭제함

  2. 로컬의 hwangjeha-4-najahwang-group 에 변경사항을 커밋함

  3. 그리고 푸시할려고하니 안돼서 소스트리 설정에서 깃허브 토큰추가함


  4. 원격(허황레포)의 4-najahwang 브랜치에 푸시함

  5. 야곰 레포의 4-hwangjeha에 PR도 성공

※ 새로운 브랜치를 만드는 동시에 **원격에 있는 branch**를 가져오려면 아래 명령어를 사용합니다.

[특정이름 지정시]
$ git checkout -b work2 **origin**/work2
git checkout -b hwangjeha-4-najahwang-group 4-hwangjeha
// 허황의 개인 프로젝트 브랜치를 로컬의 새로운 브랜치(hwangjeha-4-najahwang-group)로 복사해옴
// (현재 야곰아카데미 4-hwangjeha 브랜치와 같은 내용, 같은 헤드)

git pull [https://github.com/hwangjeha/ios-calculator-app.git](https://github.com/hwangjeha/ios-calculator-app.git) 4-najahwang-group
// 모둠 프로젝트를 pull하여 병합 시도 -> 강제로 충돌을 일으킴. 

//텍스트 에디터로 모든 파일의 충돌을 해결한 후 머지 커밋을 남기고,
//(현재 야곰 4-hwangjeha의 커밋보다 하나 더 커밋한 상태)
//문제의 4-najahwang-group 원격 브랜치에 push하면 충돌이 해결되고 
//야곰 4-hwangjeha보다도 헤드가 더 앞섰으니 덮어씌울 수 있게 된다.

이 상황을 그린 그림 (출처: 허황)

교훈

PR과 머지는 헤드를 맞춘상태에서 진행해야함

우리는 허황레포에서 4-najahwang 브랜치를 만든 후 야곰 main을 클론해왔음 ,,
그리고 야곰레포의 허황브랜치(이미 커밋이 쌓인곳)에 머지시도
→ 이러면 안된다 (커밋로그가 맞지않음)

허황 4-hwang 을 기반으로 새로운 브랜치를 하나파서

  1. revert 해서 초기상태로 돌리든지,
  2. 아예 작업한 파일을 싹지우고 빈파일을 커밋하고 시작하든지 해야함
profile
제가 나중에 다시 보려고 기록합니다 ✏️

0개의 댓글