Pull Request를 보냈을 때 충돌이 난다면?
Solution1. 내 브랜치에 병합 커밋을 만들어서 해결
- 브랜치 B에서 커밋 1과 커밋 2를 병합해서 병합충돌 문제를 해결한 커밋 3을 만듦
- 커밋 3은 충돌문제를 해결했기 때문에 정상적으로 브랜치 A에 Pull Request 가능
- But, 해당 방식은 Pull Request 때문에 쓸데없는 커밋 로그가 남게 됨
→ Rebase 방식을 사용하면 이런 문제 해결 가능
Solution2. Rebase
Rebase
: 커밋의 베이스를 떼서 다른 곳으로 붙이는 것- 깔끔한 Pull Request를 보낼 수 있음
- 내 브랜치에 내 변경사항만 남길 수 있다는 장점이 있음
- 실수하면 파일 전체가 꼬이는 문제가 발생할 수 있으므로 조심해서 사용해야 함
브랜치 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를 보낼 수 있다.