현재 상황

Screenshot 2024-01-30 at 8.12.41 AM.png

feature브랜치 > develop브랜치로 PR을 올렸다. 전에 feature > develop으로 머지된 PR까지 현재 Pull Request에 올라간 것이다.

어떻게 이런 상황이 생긴거지?

해결 과정

  1. 구글링

    다양한 원인이 있다. 그 중 하나는 다른 사람 브랜치에서 분기해 작업한 것이다.

    이를 해결하기 위해, cherry pick으로 내 커밋들만 가져와서, develop에서 브랜치를 새로 분기해 브랜치와 PR을 새로 생성하는 것이다.

  2. 직접 탐색

    원인을 찾았다. develop브랜치로 이동하니, push(9)이 있는 거다. 뭐지? 왜 push할 게 9개나 있지?싶었다. 가장 먼저 현재 develop과 연동이 안되어있구나 생각했다. 그래서 git pull origin develop —-rebase하여 현재 develop브랜치의 커밋을 기준으로 base를 다시 잡았다. 그러니 push(9)이 제거가 되었다. 그 다음, feature브랜치로 이동해서 git pull origin develop —-rebase를 치니 충돌이 2개 정도 발생했는데, 소소한 충돌이라 빠르게 해결하고, 이슈를 해결할 수 있었다.

원인 분석

내가 친 git pull origin develop —-rebase의 모든 의미를 정말 알고 친걸까?하는 의문이 들었다.

<aside> ❓ origin이 뭔데? upstream과 뭐가 달라?

즉, Upstream 저장소에서 fork해서 만든 곳이 Origin 저장소이다. 우리 프로젝트는 fork를 사용하지 않고, 하나의 저장소에서 각 브랜치를 분기해서 관리하고 있으니, Upstream저장소는 존재하지 않는다. Origin저장소만 존재할 뿐이다.

</aside>

<aside> ❓ Rebase가 뭔데?

Rebase는 말그대로 base를 재설정한다는 의미이다. 커밋의 시간에 관계없이 마지막에 merge 되는 브랜치의 커밋을 가장 뒤에 붙이는 전략

브랜치에서 대상 브랜치를 base로 해서 커밋 이력을 재정렬한다고 볼 수 있다.

Untitled

</aside>

<aside> ❓ Rebase는 언제 사용하는 것이 좋을까?

Rebase를 하지 않아서 발생한 이슈였다. 머지할 브랜치를 Rebase함으로써, 머지할 브랜치의 가장 최신 커밋을 현재 브랜치의 base로 다시 잡을 수 있다. 그래야, 머지할 브랜치의 최신 사항을 반영할 수 있는 것이다.

Reference

Git Pull Request에 다른 브랜치의 커밋 로그까지 딸려오는 경우 해결방안

Git branch 최신화 - PR시 다른사람 커밋까지 딸려오는 문제 해결하기

[Git] Rebase란, Fast-Forward Merge

[Git] Rebase란, Fast-Forward Merge