GitHub pull request 보내기
📌 github에서 브랜치를 만들고 PR 보내는 방법
- main repo를 로컬 저장소에 clone으로 받아옵니다.
- 그다음 main 브랜치에서 개발 브랜치 ex): dev를 하나 만들어 작업할 코드를 작성합니다. 커밋하고 원격 저장소로 push를 해줍니다.
- 처음 만든 브랜치라면 연결이 되어있지 않을 수 있기 때문에 upstream으로 연결한 후에 다시 push를 합니다.
- 그러면 원격 저장소에서 PR을 하라는 버튼이 생기고 그 버튼을 눌러서 PR을 생성하면 됩니다.
📌 github에서 fork 하여 PR 보내는 방법
원본 저장소를 main, fork저장소를 origin이라고 하겠습니다.
- main레포에서 포크를 하면 개인 깃 헙 저장소에 origin저장소가 생깁니다.
- 우리는 포크 된 저장소를 개인 로컬 저장소로 clone을 받습니다. 작업 브랜치를 하나 따서 작업하고 커밋 -> push 하면 origin저장소 github 페이지에서 PR 버튼이 생깁니다.
- PR을 누르면 origin으로 PR을 보낼 수도 있고 원본인 main 원격 저장소에도 PR을 보낼 수 있습니다.
- main으로 PR을 생성하면 main 저장소 페이지로 이동하게 되면서 PR을 보내게 됩니다.
📌 PR 보낸 코드가 merge 되지 않고 PM으로부터 수정을 요구하는 경우
- PR 메뉴에서 프로젝트 매니저(PM)의 코멘트나 request change 메시지를 확인한다.
- 수정하겠는 comment를 남긴 후 local repo에서 PR을 날린 해당 브랜치에서 코드를 수정한다.
- 그 파일을 커밋 -> 푸시를 하게 되면 수정한 커밋 메시지가 자연스럽게 이미 요청된 PR의 Conversation에 붙게 된다. 다시 PR을 생성하지 않아도 된다.
- 이것은 fork 하여 PR을 보내는 경우 & main repo를 바로 clone 받아서 PR을 보내는 경우 둘 다 모두 해당되는 내용다. 똑같이 동작한다.
🔨 (PR이 브랜치를 기준으로 동작하기 때문인 것 같다. 정확한 정보는 추후에 업데이트하겠습니다.)
📌 GitHub에서 PR 보내고 다시 PR 보낼 때 자주 발생하는 상황
원본 저장소를 main, fork저장소를 origin이라고 하겠습니다.
- 원보 저장소에서 포크 합니다. 포크 repo를 로컬에 clone을 받습니다. 브랜치를 es6라고 따서 작업을 한 후 origin으로 푸시하면 PR버튼이 생기고 PR을 main으로 보내서 master브랜치에 merge가 되었다.
- 여기서 많이 발생하는 실수는 새 기능을 추가하기 위해서 new 브랜치를 만들고 3번과 같이 PR을 날리려고 할 때 Can't automatically merge라는 빨간 문구가 뜨게 된다.
- 이 상황이 발생하는 이유는 main의 master에는 es6의 코드가 merge가 되었는데 origin의 master에는 es6가 패치되지 않았기 때문이다.
- 즉, es6가 merge 되지 않은 로컬 master에서 new브랜치를 따서 작업한 코드를 PR을 보내려고 할 때 main과 origin의 master 브랜치의 싱크가 맞지 않아서 충돌 상황이 발생되기 때문이다.
🛠 해결 방법
- main과 origin의 master 브랜치의 싱크를 맞혀줘야 한다.
첫 번째 방법
- 로컬 저장소와 원본 main저장소를 upstream으로 연결해서 직접 main의 es6가 추가된 master코드를 로컬 master에 rebase(병합)시킨다.
- 그리고 로컬에서 병합된 코드를 origin 레포에 강제 푸시를 해서 싱크를 맞혀준다.
두 번째 방법
- origin 깃 헙 사이트에서 Fetch upstream으로 원본 main의 변경 사항들을 pull 한다.
- origin repo에서 로컬 저장소로 fetch -> pull 해서 싱크를 맞혀준다.
이렇게 싱크를 맞혀주고 기존 new 브랜치는 삭제하고 다시 개발 브랜치를 생성해서 작업한 코드로 push -> PR을 날리면 Can't automatically merge에러는 더 이상 발생하지 않는다.
'SERVER > Git' 카테고리의 다른 글
[Git] 협업을 위한 git 커밋컨벤션 설정하기 (0) | 2022.01.29 |
---|---|
이미 push된 파일 .gitinore 적용하기 (0) | 2021.12.16 |
서버 branch 삭제 후 로컬 branch 업데이트(동기화) (0) | 2021.12.16 |
# 6 - Git 다양한 실무 사례 (0) | 2021.10.02 |
Git Flow 란? (0) | 2021.09.28 |