Github ๋งค๋‰ด์–ผ

Github ๋งค๋‰ด์–ผ

๋ชฉ์ฐจ
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 ํ˜‘์—… ํ”Œ๋กœ์šฐ

์ €์žฅ์†Œ ๊ฐ€์ ธ์˜ค๊ธฐ

  1. [@GITHUB] ๊ณตํ†ต ๊ณ„์ •(ex. organization) ์›๊ฒฉ ์ €์žฅ์†Œ(Github repository)๋ฅผ fork๋ฅผ ํ•œ๋‹ค
    1. ๊ณตํ†ต ๊ณ„์ • ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” upstream์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
    2. ๊ฐœ์ธ ๊ณ„์ •์œผ๋กœ ๊ฐ€์ ธ์˜จ ์›๊ฒฉ ์ €์žฅ์†Œ๋Š” origin์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค
  1. ๊ฐœ์ธ ์›๊ฒฉ ์ €์žฅ์†Œ๋ฅผ ๋กœ์ปฌ์— ํด๋ก ํ•œ๋‹ค
git clone <๊ฐœ์ธ ๊ณ„์ • ์›๊ฒฉ ์ €์žฅ์†Œ ์ฃผ์†Œ>
  1. ๋ ˆํฌ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด 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)
  1. ์›๊ฒฉ ์ €์žฅ์†Œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ
git fetch origin git fetch upstream # ๋˜๋Š” ๋ชจ๋“  ๋ฆฌ๋ชจํŠธ ๋ฐ์ดํ„ฐ ํ•œ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๊ธฐ git fetch --all # ์ž˜ ๊ฐ€์ ธ์™”๋Š”์ง€ ํ™•์ธ (git l ๋ช…๋ น์–ด๋Š” alias ๋“ฑ๋กํ•ด์•ผ ํ•œ๋‹ค) git l --all

์ž‘์—…ํ•˜๊ธฐ

๐Ÿ’ก
์ด ๋ถ€๋ถ„์€ forkํ•˜๊ธฐ๋กœ ํ–ˆ์„ ๋•Œ ์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” ์ƒ๋žตํ•ฉ๋‹ˆ๋‹ค - ์žฌ์˜
notion image
๐Ÿ’ก
TL;DR: 1. ๋กœ์ปฌ์—์„œ ์ž‘์—…ํ•œ ๋‚ด์šฉ์„ origin์— push ํ•œ๋‹ค. 2. origin์— ์˜ฌ๋ผ์˜จ ๋‚ด์šฉ์„ upstream์œผ๋กœ PR์„ ๋ณด๋‚ธ๋‹ค.

Step#1 ๋ฌด์—‡์„ ์ž‘์—…ํ• ์ง€ ์ด์Šˆ๋ฅผ ๋“ฑ๋กํ•œ๋‹ค

notion image

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. ์ด์Šˆ ๋ฒˆํ˜ธ ์จ์ฃผ๊ณ  / ์˜ค๋ฅธ ์ชฝ์—์„œ ์ด์Šˆ ๊ฐ™์ด ๋‹ฌ์•„์ฃผ๊ธฐ
notion image

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

See also