๋ชฉ์ฐจ
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