목차
TL;DRPR을 여러 개 올렸을 때 Git 그래프 꼬이지 않게 하는 팁Github PR 협업 플로우저장소 가져오기작업하기Step#1 무엇을 작업할지 이슈를 등록한다Step#2 origin/develop 브랜치에서 이슈 번호(ex. DVT-#1)로 feature 브랜치를 만든다Step#3 원격 저장소의 최신 상태를 로컬에 반영한다Step#4 작업을 하고 커밋을 남긴다Step#5 작업을 푸시하기 전에 Step#3을 반복한다Step#6 작업이 끝난 피쳐 브랜치를 origin에 push 한다Step#7 origin에 push 된 내용을 토대로 origin에 PR을 올린다Step#7-1 PR 올린 브랜치의 커밋 히스토리를 변경(ex. squash)하고 싶을 때Step#8 머지 완료된 브랜치 정리하기Git 커밋 규칙See also
TL;DR
# 원격 저장소 데이터를 받아온다 git fetch origin # develop 브랜치를 최신화한다 git switch develop git rebase origin/develop # 새 작업 브랜치를 생성한다 (create new-branch start-point) git switch -c "DVT-#1" origin/develop # 작업을 커밋한다 git add . git commit -m "DVT-#1 이슈 제목" # 푸시하기 전에 git 그래프를 꼬이지 않게 하면서 충돌을 사전에 방지한다 ("DVT-#1") git fetch origin && git rebase origin/develop # 작업을 푸시한다 git push origin "DVT-#1" # PR이 머지된 후 뒷정리를 한다 git switch develop git pull --rebase origin develop #__로컬 브랜치 삭제 git branch -d <머지가 완료된 작업 브랜치> #__원격 브랜치 삭제 git remote prune origin <머지가 완료된 작업 브랜치>
PR을 여러 개 올렸을 때 Git 그래프 꼬이지 않게 하는 팁
현재 여러 PR이 동시에 올라와 있습니다. 이걸 동시다발적으로 머지하면 깃그래프가 겹쳐지게 되겠죠?
그래서 머지하기 직전에:
# 원격 develop 최신화 $ git fetch --all $ git switch develop $ git pull --rebase origin develop # 작업 브랜치를 최신화된 develop 기준으로 리베이스 $ git switch <작업브랜치> $ git rebase origin/develop # 작업 브랜치를 최신화된 develop 기준으로 강제 푸시(코드 변화가 없다는 전제 하에) $ git push origin <작업브랜치> --force # 이 상태에서 머지를 하면 git 그래프 깔끔
위 작업으로 리베이스를 해주고 머지하면 git graph가 한줄로 예쁘게 나옵니다 ㅎㅎ
위 내용은 필수사항은 아닙니다. 알아두시면 도움은 되겠지만 스킵하셔도 됩니다~~
Github PR 협업 플로우
저장소 가져오기
- [
@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 origin/develop 브랜치에서 이슈 번호(ex. DVT-#1
)로 feature 브랜치를 만든다
# 새 피쳐 브랜치를 origin/develop으로부터 만든다 (-c: create) git switch -c "DVT-#1" origin/develop # 참고: 브랜치 이름 변경하기(from: DVT-#1 to: DVT-#4) git branch -m "DVT-#1" "DVT-#4"
Step#3 원격 저장소의 최신 상태를 로컬에 반영한다
git fetch origin && git rebase origin/develop git l --all
Step#4 작업을 하고 커밋을 남긴다
git add . git commit -m "DVT-#이슈번호 내용" # 예시: DVT-#8 인증 스레드 알람 추가
Step#5 작업을 푸시하기 전에 Step#3을 반복한다
현재 브랜치의 작업이 길어졌을 경우, 그동안
origin/develop
이 업데이트 되었을 수도 있다. 이때 브랜치를 푸시하기 전에 이력이 꼬이지 않도록 최신 상태를 로컬에 반영한다.git fetch origin && git rebase origin/develop
Step#6 작업이 끝난 피쳐 브랜치를 origin에 push 한다
git push origin <브랜치>
Step#7 origin에 push 된 내용을 토대로 origin에 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-[이슈번호]
Git 커밋 규칙
DVT-#8 인증 스레드 알람 추가
이슈 레이블:
- feat
- refactor
- fix
- docs
- chore
- style