[git] 풀리퀘스트 후 동일한 개발 브랜치에서 작업하기

·2022년 2월 24일
0

공부한 것

목록 보기
21/58
post-thumbnail

현재 코드스쿼드 마스터즈 과정을 진행중이다. 이번 달 부터 코드리뷰를 시작했다. 코드리뷰를 받는 방법은 github을 기반으로 한 온라인 코드 리뷰 방법을 보고 따라 하면 된다.

영상을 보면 첫 step1 브랜치를 리뷰를 받고 메인에 머지 되면 리베이스 후 다음 작업을 이어나갈 때 step2라는 새로운 브랜치를 만들어서 진행하라고 한다. 또 step2를 리뷰 받고 다음 작업을 할 때는 step3라는 브랜치를 새로 만들고... (반복)
이렇게 브랜치를 계속 새로 만드는 방식으로 하는 것 같은데 그럼 step2 브랜치에 계속 작업을 이어나 갈 수는 없는 건가? 라는 궁금함이 생겼다.

즉, 기존에 작업하던 개발 브랜치가 메인에 머지되고 같은 개발 브랜치에서 작업을 이어나갈 수 있는가?

이게 궁금했다. 나는 사실상 origin/step2 브랜치를 풀리퀘스트 보내고 upstream/main에 머지가 된 것이고 그걸 origin/main에 리베이스 해왔으니까 세 브랜치들이 모두 같은 커밋을 가지고 있으니 충돌이 안날 것이라고 생각했다.

결론은 충돌했다.🤯

🥇 첫번째 시도

처음에는 세 브랜치가 모두 동일한 커밋을 가지고 있다고 생각해서 리베이스를 하고 바로 다른 조작 없이 step2에서 작업을 이어갔다. 그렇게 작업을 하고 코드 리뷰를 위해 풀리퀘스트를 날리는데 오류가 났다.

이때는 어떻게 해결했는지도 모르겠다. 리뷰 받으려면 풀리퀘스트를 날려야 했기 때문에 검색해서 여러 방법 막 따라 하다가 해결이 됐다.

🥈 두번째 시도

곰곰이 생각해 봤다. upstream/main에서 origin/main으로 리베이스 해왔으니 origin/mainorigin/step2가 다른 점이 생겨서 충돌이 나는 것 같다고 생각이 됐다. 커밋들이 동일해도 풀리퀘스트, 머지, 리베이스 과정을 거쳤으니 뭔가 다른 점이 있는가보다라고 생각한 것이다.

그래서 같은 상황을 만들어 다시 테스트해 봤다.

메인끼리 리베이스하고 origin/step2에서 origin/main을 한 번 더 리베이스 해왔다. 근데 충돌 어게인.... 막...난리가 나서 삭제했던 파일이 다시 생기고... 한참 전의 커밋과 충돌이 난 것이다. 몇 단계 전의 커밋도 아니고 왜 하아아아안참 전에 커밋이랑 이러는 건지...

🍺 원인

결론적으로 `upstream/main`, `origin/main`, `origin/step2`이 같은 커밋을 가지고 있을 것이라는 생각부터 틀렸다.
upstream/main, origin/main은 리베이스를 통해 동일한 커밋 내역을 가지고 있는 것이 맞다. 하지만 origin/step2는 동일하지 않았다.

위 사진의 빨간 네모를 보면 origin/main, origin/step2 두 브랜치의 커밋이 전혀 다른 것을 확인할 수 있다. (pokky가 main 브랜치다.)

하지만 어쨌든 main 브랜치의 어떤 한 시점에서 step2 브랜치를 만든 것이 아닌가.

step2 브랜치의 커밋 내역을 거슬러 올라가다 보면 main 브랜치에서 뻗어 나온 시점의 커밋을 찾을 수 있다.

결국 저 동일한 시점 이후의 커밋들이 달라서 촤르르르르르르르르륵 충돌이 난것이다.🎉

그렇다면 분명 나는 step2를 풀리퀘스트 했는데 왜!!! 머지 하면 커밋이 달져서 나를 힘들게 하는 것인가? 그거슨 머지 할 때 설정 때문이다.

출처 : https://insight.infograb.net/docs/user/merge_request/
하단에 `Squash commits`에 체크하면 MR에 쌓여있는 커밋 리스트를 하나의 커밋으로 묶어서 Merge를 실행합니다. 라고 적혀있다. (근데 이 사진 깃허브가 맞는지 모르겠다.)

그래서 이렇게 풀리퀘스트 단위처럼 커밋이 생기는 것이다.

...부분을 펼치면 확인 가능하다. 합치지 않고 머지 하는 방법이 있는지는... 안 찾아봤다. 직접 풀리퀘스트를 머지 할 일이 없어서...😉

어떻게 보면 풀리퀘스트, 머지, 리베이스 과정을 거쳤으니 뭔가 다를 것이다. 라는 생각은 맞다고 볼 수도 있겠다.

🧋 해결

이제 원인을 알았으니 해결법은 어렵지 않다. 그냥 step2 브랜치를 main 브랜치와 똑같이 만들어 주면 된다.

  • step2 브랜치의 커밋을 main 브랜치와 동일한 시점까지 돌아간다. 그리고 해당 시점 이후의 커밋을 동일하게 합쳐준다.
  • step2 브랜치를 삭제한다. main 브랜치에서 step2 브랜치를 새로 만든다.

여러 가지 방법이 있겠지만 나는 저 step2 브랜치를 삭제하고 다시 만드는 게 가장 간편한 것 같다. 근데 저 방법은 사실상 유튜브 영상에서 step3 브랜치를 만드는 것과 같은 방법이다. 이름이 step2일뿐 새로 브랜치를 만드는 거니까.

결국 먼 길 돌아 강의에서 알려주는 방법이 젤 좋다는 걸 알게 됐다.

1개의 댓글

comment-user-thumbnail
2022년 5월 3일

좋은 글 감사합니다^^

답글 달기