Github PR 협업 플로우 (fork 버전)저장소 가져오기작업하기Step#1 무엇을 작업할지 이슈를 등록한다Step#2 upstream/develop 브랜치에서 이슈 번호(ex. MGC-1)로 feature 브랜치를 만든다Step#3 원격 저장소의 최신 상태를 로컬에 반영한다Step#4 작업을 하고 커밋을 남긴다Step#5 작업을 푸시하기 전에 Step#3을 반복한다Step#6 작업이 끝난 피쳐 브랜치를 origin에 push 한다Step#7 origin에 push 된 내용을 토대로 upstream에 PR을 올린다Step#7-1 PR 올린 브랜치의 커밋 히스토리를 변경(ex. squash)하고 싶을 때Step#8 머지 완료된 브랜치 정리하기Github 협업 매뉴얼 (fork 없이 공통계정 저장소 사용)Git 커밋 규칙See also
Github PR 협업 플로우 (fork 버전)
211115 주요 변경 사항
현재
upstream
리모트 이름 → origin
으로 변경하였습니다.
(이유: 프로젝트 상황에 의하여 공통 계정 원격 저장소로 관리하기 때문)
따라서 위에 유념하며 따라하시기를 권장합니다. 저장소 가져오기
- [
@GITHUB
] 공통 계정(ex. organization) 원격 저장소(Github repository)를 fork를 한다 - 공통 계정 원격 저장소는
upstream
이라고 부른다 - 개인 계정으로 가져온 원격 저장소는
origin
이라고 부른다
- 개인 원격 저장소를 로컬에 클론한다
git clone <개인 계정 원격 저장소 주소>
- 레포를 연결하기 위해
upstream
과origin
을 설정한다
# 원격 저장소 정보 자세히 보기 (-v: verbose) git remote -v # 원격 저장소 설정하기 git remote add upstream <공통 계정 원격 저장소 주소> # 설정 완료 예시 git remote -v origin git@github.com:datalater/dali2-test.git (fetch) origin git@github.com:datalater/dali2-test.git (push) upstream git@github.com:daliteam/dali2-test.git (fetch) upstream git@github.com:daliteam/dali2-test.git (push)
- 원격 저장소 데이터 가져오기
git fetch origin git fetch upstream # 또는 모든 리모트 데이터 한번에 가져오기 git fetch --all # 잘 가져왔는지 확인 (git l 명령어는 alias 등록해야 한다) git l --all
작업하기
이 부분은 fork하기로 했을 때 이해를 돕기 위한 설명입니다. 현재는 생략합니다 - 재영

TL;DR:
1. 로컬에서 작업한 내용을 origin에 push 한다.
2. origin에 올라온 내용을 upstream으로 PR을 보낸다.
Step#1 무엇을 작업할지 이슈를 등록한다

Step#2 upstream/develop 브랜치에서 이슈 번호(ex. MGC-1
)로 feature 브랜치를 만든다
# upstream/develop 브랜치에서 새 피쳐 브랜치를 만든다 (-c: create) git switch -c MGC-1 upstream/develop # 참고: 브랜치 이름 변경하기(from: MGC-1 to: MGC-4) git branch -m MGC-1 MGC-4
Step#3 원격 저장소의 최신 상태를 로컬에 반영한다
git fetch upstream && git rebase upstream/develop git l --all
Step#4 작업을 하고 커밋을 남긴다
git add . git commit -m "MGC-이슈번호 내용" # 예시: MGC-8 인증 스레드 알람 추가
Step#5 작업을 푸시하기 전에 Step#3을 반복한다
현재 브랜치의 작업이 길어졌을 경우, 그동안 upstream/develop이 업데이트 되었을 수도 있다. 이때 브랜치를 푸시하기 전에 이력이 꼬이지 않도록 최신 상태를 로컬에 반영한다.
git fetch upstream && git rebase upstream/develop
Step#6 작업이 끝난 피쳐 브랜치를 origin에 push 한다
git push <레포지토리 리모트> <작업한-브랜치>
Step#7 origin에 push 된 내용을 토대로 upstream에 PR을 올린다
양식:
1. MGC-이슈번호 커밋내용
2. 이슈 번호 써주고 / 오른 쪽에서 이슈 같이 달아주기

Step#7-1 PR 올린 브랜치의 커밋 히스토리를 변경(ex. squash)하고 싶을 때
# 예시 git graph * 3fd0f11 - (HEAD -> test-branch) MGC-100 사소한 컨벤션 수정 * af30d1b - MGC-100 리드미 문서 추가 # 위 두 개 커밋을 합치고 싶다! 사소한 컨벤션 수정 커밋을 남기고 싶지 않아! git rebase -i HEAD~2 # 출력 화면 1 pick af30d1b MGC-100 리드미 문서 추가 # 더 오래된 커밋 2 pick 2032543 MGC-100 사소한 컨벤션 수정 # 최근 커밋 3 4 # Rebase 7587ceb..2032543 onto 7587ceb (2 commands) 5 # 6 # Commands: 7 # p, pick <commit> = use commit 8 # r, reword <commit> = use commit, but edit the commit message 9 # e, edit <commit> = use commit, but stop for amending 10 # s, squash <commit> = use commit, but meld into previous commit # 위 화면에서 2번째 커밋 pick을 squash로 바꾼다 1 pick af30d1b MGC-100 리드미 문서 추가 2 squash 2032543 MGC-100 사소한 컨벤션 수정 # 커밋 메시지 새로 작성하는 화면 (두개 커밋을 합치니까 새로운 커밋을 생성해야 하기 때문에) 1 # This is a combination of 2 commits. 2 # This is the 1st commit message: 3 4 MGC-100 리드미 문서 추가 5 6 # This is the commit message #2: 7 8 MGC-100 사소한 컨벤션 수정 # 원하는대로 수정 1 MGC-100 리드미 문서 추가 # rebase 결과 ❯ git rebase -i HEAD~2 [detached HEAD 8226233] MGC-100 리드미 문서 추가 Date: Fri Oct 22 18:10:22 2021 +0900 2 files changed, 7 insertions(+), 1 deletion(-) Successfully rebased and updated refs/heads/test-branch. # PR에 이미 올라간 히스토리를 변경해서 push할 것이기 때문에 --force push를 한다(초보자는 --force 금지) git push <remote> <current-branch> --force
Step#8 머지 완료된 브랜치 정리하기
# 머지가 완료된 develop 브랜치의 최신 코드를 반영한다 git switch develop git fetch upstream && git rebase upstream/develop # origin 원격 저장소에도 develop 반영한다 git push origin develop # 작업이 완료된 브랜치를 삭제한다 # -- merge 이후 안전하게 삭제 git branch -d MGC-[이슈번호] # -- squash and merge 이후 강제로 삭제 git branch -D MGC-[이슈번호] # 로컬에 남아 있는 원격 저장소 브랜치 삭제하기 # -- origin에서 이미 브랜치 삭제한 경우 로컬에 반영하기 git remote prune origin # -- origin에 올라간 브랜치 삭제하기 git push origin :MGC-[이슈번호]
Github 협업 매뉴얼 (fork 없이 공통계정 저장소 사용)
not yet written
Git 커밋 규칙
MGC-8 인증 스레드 알람 추가
이슈 레이블:
- feat
- refactor
- fix
- docs
- chore
- style
See also
