호우동의 개발일지

Today :

article thumbnail

Pull Request를 보냈을 때 충돌이 난다면?

pull request 보낼 때 충돌 발생
pull Request 보낼 때 충돌 발생

 


Solution1. 내 브랜치에 병합 커밋을 만들어서 해결

해결된 모습
해결됨

  • 브랜치 B에서 커밋 1과 커밋 2를 병합해서 병합충돌 문제를 해결한 커밋 3을 만듦
  • 커밋 3은 충돌문제를 해결했기 때문에 정상적으로 브랜치 A에 Pull Request 가능
  • But, 해당 방식은 Pull Request 때문에 쓸데없는 커밋 로그가 남게 됨
    Rebase 방식을 사용하면 이런 문제 해결 가능

 


Solution2. Rebase

  • Rebase : 커밋의 베이스를 떼서 다른 곳으로 붙이는 것
    • 깔끔한 Pull Request를 보낼 수 있음
    • 내 브랜치에 내 변경사항만 남길 수 있다는 장점이 있음
    • 실수하면 파일 전체가 꼬이는 문제가 발생할 수 있으므로 조심해서 사용해야 함

리베이스를 통한 해결
리베이스를 통한 해결 과정1
리베이스를 통한 해결과정 2
리베이스를 통한 해결과정 2

브랜치 B에 있는 커밋 1과 커밋 2를 브랜치 A에 커밋 3에 연결시켜 준다.

이러면 브랜치 A와 B는 같은 선상에 있게 되어
커밋 3과 커밋 1은 문제없이 병합이 가능한 상태가 된다.

 

 


SourceTree에서 Rebase 사용하기

분리되어 있는 브랜치
분리되어 있는 브랜치

SourceTree에 이런 식으로 커밋이 분리되어 있고,
feature/jp 브랜치를 Rebase 하여 main브랜치 붙일 것이다.

즉, feature/jp의 베이스를 main으로 바꿀 것이다.

재배치
재배치

먼저 feature/jp 브랜치에서 베이스로 삼고 싶은 커밋을 오른쪽 마우스를 눌러 재배치를 누른다.
그러면 병합충돌이 일어나 수정하라는 메시지가 나올 것이다.

충돌 해결 방법
충돌 해결하는 여러 방법이 나옴

그러면 사용하고 싶은 부분들을 살려주는 것으로 충돌을 해결한다.
나는 HEAD 부분을 살리는 것으로 해결했다.

재배치 계속하냐는 경고창
리베이스 경고창 발생

오류를 수정한 파일을 다시 스테이지에 올린 뒤에 위쪽 토글 옵션에서
액션 → 재배치 계속을 누른다.

그럼 위와 같은 화면이 뜬다. 재배치 계속을 누른다.

리베이스 과정의 브랜치 상태
리베이스 과정의 브랜치 상태

그럼 이렇게 Local 저장소에는 feature/jp 브랜치가 main 브랜치에 Rebase 된 것을 확인할 수 있는데
원격 저장소인 origin은 아직 그대로인 것을 확인할 수 있다.


이제 Push를 해서 원격저장소에 반영을 해야 하는데
Rebase는 이력을 조작하는 행위이기 때문에 일반 Push로는 할 수 없다.

그러므로 강제 Push를 해야 하기 때문에

설정창 클릭
맥북 기준
빨간창
맥북 기준

고급(Advanced) → Allow force push에 체크한다

현재 Mac SourceTree 최신 버전에 오류가 있어서 한글 버전으로 할 시 고급 탭이 보이지가 않는다.
그래서 언어설정을 영어로 바꿔서 프로그램을 재시작하면 다시 보일 것이다.

합쳐진 것을 확인 가능
합쳐진 것이 확인 가능하다.

이후 Push를 누르고 아래에 강제푸시 옵션을 체크하고 다시 Push 하면 정상적으로 완료되고
위와 같이 원격저장소에도 정상적으로 반영되는 것을 확인할 수 있다.

이렇게 하면 커밋로그 기록 없이 Pull Request를 보낼 수 있다.