Develop/Git

[Git]PR/branch/branch 나누기

순무엄마동생 2021. 2. 16. 21:12

Git의 PR 관련된 설명은 여기에 가서 봐주세요!

 

PR를 새롭게 올리려고 branch를 나눴는데 다른 branch의 파일도 함께 딸려 올라가는 경우가 있습니다. 저도 겪은 사례고 Git에 익숙하지 않다면 누구나 겪어봤을 법한 일입니다. 그래서 그 이유와 해결 방법을 작성해보려 합니다.

 

 

이유?

왼쪽 그림처럼 branch1과 branch2가 main 브랜치에서 갈라져나온 것이 아닌 우측 그림처럼 branch1의 내용을 이어받은 branch 1.1 버전이 생성되었기 때문입니다. 그럼 왜 이렇게 되었고 해결방안이 무엇인지 설명드리겠습니다.

 

 

 

왜?

다른 여러 이유가 있을 수 있지만 제가 했던 실수 하나만 이유로 꼽겠습니다. (왜냐하면 그 이유밖에 모르기 때문이죠😁) branch를 새로 생성할 때, 항상 최신의 상태로 업데이트 되어있는 최상위 브랜치에서 생성해야합니다. 하지만 git에 익숙하지 않았던 저는 무작정 branch를 만든다고 현재 상태에서 새로운 브랜치를 만들었습니다. 그것은 곧, branch1에서 새로운 브랜치를 만드는 행동이었습니다. 그러다보니 branch1의 모든 내용이 새로 만든 branch 1.1에 존재했고 branch 1.1의 내용을 PR로 올릴 때마다 branch1에서 머지되지 않은 내용도 같이 PR에 올라가는 것이었습니다.

 

 

 

해결방안

1. 최상위 브랜치 정하기 → 일반적으로 main/master 브랜치

2. 최상위 브랜치 최신상태 유지하기

3. 최상위 브랜치에서 새로운 브랜치 생성하기

4. PR하기

 

 

하나씩 살펴보기

2. 최상위 브랜치 최신상태 유지하기

레포의 원래 저장소를 upstream라고 칭합니다. 최신 상태 유지를 위해 upstream의 상태를 받아와야 합니다.

아래 명령어를 통해 현재 프로젝트에 등록된 리모트 저장소를 확인해주니다.

git remote -v

 

리모트 저장소에 upstream이 없으면 추가하고 다시 리모트 저장소를 확인해줍니다.

저는 그냥 upstream이 편해서 저걸로 지정했는데 원하는 저장소명으로 해주셔도 됩니다.

git remote add <리모트저장소이름> <저장소URL>

 

 

upstream의 최신 상태를 받아와줍니다. 이 때, 브랜치는 최상위 브랜치여야합니다.

파란색 글씨로 표시된 것이 현재 브랜치입니다. 저는 최상위가 main입니다!

git fetch <리모트저장소이름>

 

 

받아온 최신 상태를 내 최상위 브랜치와 합쳐줍니다.

git merge <리모트저장소이름>/<브랜치명>

 

 

마지막으로 잘 머지된 내용을 원격 저장소에 push 해줍니다. 여기는 upstream이 아니라 내가 fork 해 온 레포지토리 원격 저장소에 올려줘야하니 리모트 저장소 이름에 origin을 해줍니다. 기본적으로 origin이지만 다르게 설정한 경우 그 리모트명을 사용해줍니다!

git push <리모트저장소이름> <브랜치명>

 

그럼 최신상태 끝!

upstream에만 있고 main에 없던 내용들을 합쳐서 최신의 상태로 만들어 줬습니다.

 

 

 

3. 최상위 브랜치에서 새로운 브랜치 생성하기

<브랜치명>의 이름을 가진 브랜치를 생성하고 그 브랜치로 이동한다는 명령어입니다.

기존에 있는 브랜치로 이동하는 것이라면 -b는 제외하시면 됩니다.

git checkout -b <브랜치명>

 

 

4. PR하기

내부에서 코드를 작성하고 수정한 다음 나머지는 여기의 내용을 따라가주시면 됩니다!