[우아한 테크코스 3기]Git은 정말 어려워요 (Rebase vs Merge)

처음 우아한 테크코스에 미션을 수행하면서 Git을 사용할 때, 헤맸던 부분에 대해서 정리하고자 한다. 

 

우아한 테크코스의 프로그래밍 미션 수행 과정

우아한 테크코스에서 미션을 시작하면 woowacourse 저장소에 자신의 github아이디로 브랜치가 생성된다. 크루들은 미션을 진행 한 뒤, 이곳으로 PR을 보내야 한다.

 

  • woowacourse의 미션 프로젝트를 자신의 계정으로 fork
    • fork : 저장소를 자신의 계정으로 복사하는 기능
  • fork한 저장소를 자신의 컴퓨터로 clone
    • clone : git 서버에 존재하는 저장소를 자신의 로컬에 복사하는 기능
  • 기능 구현을 위한 브랜치 생성 (ex step1)
  • 해당 브랜치에서 작업 후 add, commit, push
  • 1단계 미션 제출 PR 보내기
  • PR merge - 미션 완료
    • PR로 보낸 1단계 구현 사항이 woowacourse 저장소에 반영
  • woowacourse 저장소와 동기화
    • remote add {저장소 별칭} {base 저장소 url}
    • git fetch upstream {본인 아이디}
    • git rebase upstream/{본인 아이디}
  • 다음 기능 구현을 위한 브랜치 생성 (ex step2)

 

나는 처음에 rebase를 진행하지 않고, 바로 step2 브랜치를 만들어 미션을 진행했었다. 이렇게 진행을 하니 추후에 PR이 보내지지 않았다. 나와 똑같은 경험을 한 크루들이 이전에도 있었는지 해당 사항에대해 FAQ란에 정리가 되어 있었다.

 

FAQ) PR에서 충돌이 발생하는데 어떻게 해결하면 좋을까요?

woowacourse 저장소와 rebase를 하지 않은 상태에서 브랜치를 생성했더니 충돌이 발생하고 있어요.

  • git checkout {본인_아이디}
  • git reset --hard upstream/{본인_아이디}
    • 자신의 로컬의 본인_아이디 브랜치의 소스를 upstream의 본인_아이디 소스로 되돌림
    • hard는 돌아가려는 이력의 이후의 모든 내용을 지워버림
    • 로컬의 본인_아이디에서 커밋을 진행 했더라도 해당 내용은 사라지고, upstream 본인_아이디 소스로 되돌아감
  • git checkout {기능_브랜치}
  • git merge 본인_아이디
    • 기능 브랜치와 upstream/{본인_아이디}로 되돌아간 로컬의 본인_아이디 브랜치와 merge

 

FAQ를 통해서 PR이 보내지지 않는 이슈를 해결하였다. 그러나 PR후 내용을 살펴보니 pr merge이전의 커밋이 100개가 넘어갔다. 반면 다른 크루들의 PR에는 Merge된 이후의 커밋만 PR에 적용되어서 보기에 편했다.

 

여기서 한가지 의문점이 생겼다. Rebase와 Merge는 뭐가 다른거지...?

 

Rebase와 Merge의 차이점은 무엇인가

이런 상태의 이력 커밋이 존재한다.

  • Merge
    • branch를 통합한다.

  • Rebase
    • base를 옮긴다.
    • branch는 base를 가지고 있어서 base에서 부터 코드를 수정하는데, rebase는 그 base를 바꾸어주는 작업이다.

결론

그렇다면 기능_브랜치와 본인_아이디 브랜치를 merge하지 않고, 바로 기능_브랜치의 base를 upstream/본인_아이디로 바꾸어 주어도 되었을 듯 하다. 

 

아니면 master 브랜치에서 임의의 브랜치를 하나 생성하고 이곳에서 upstream/본인_아이디로 rebase를 한다. 그 다음 기능 브랜치를 생성해서 진행하면 될듯하다.

 

기능 브랜치에 미리 커밋을 해놓은 상태였다면 코치분 답변으로는 cherry pick을 사용해서 옮겨오면 된다. 이 문제에 대해 길게 답변해 주신 내용이 있었는데 slack 내용이 없어져 기억에 의존하여 글을 남겨본다.

 

 

참고

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

 

댓글



Designed by JB FACTORY