๊ฐ๋ฐ ์ด๋ณด์๋ฅผ ์ํ GitHub Pull Request ๋ง๋ค๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ๋ ์ ์ฒด ํ๋ฆ ์ค์ต (๋ธ๋์น ์์ฑโ์ปค๋ฐโPRโ๋ฆฌ๋ทฐ ๋ฐ์)
๊ฐ๋ฐ ์ด๋ณด์๋ฅผ ์ํ GitHub Pull Request ๋ง๋ค๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ๋ ์ ์ฒด ํ๋ฆ ์ค์ต (๋ธ๋์น ์์ฑโ์ปค๋ฐโPRโ๋ฆฌ๋ทฐ ๋ฐ์) ๊ฐ๋ฐ์...
๊ฐ๋ฐ ์ด๋ณด์๋ฅผ ์ํ GitHub Pull Request ๋ง๋ค๊ณ ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ๋ ์ ์ฒด ํ๋ฆ ์ค์ต (๋ธ๋์น ์์ฑโ์ปค๋ฐโPRโ๋ฆฌ๋ทฐ ๋ฐ์)
๊ฐ๋ฐ์ ์์ํ๊ณ ๋์ ๊ฐ์ฅ ๋นจ๋ฆฌ ์ฑ์ฅํ๋ ์๊ฐ์ โํผ์ ์ง ์ฝ๋โ๋ฅผ โ๋ค๋ฅธ ์ฌ๋์ ๋โ์ผ๋ก ๋ค์ ๋ณด๋ ๋์ ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์ผ๋ ค๋ฉด GitHub์์ Pull Request(PR)๋ฅผ ๋ง๋ค ์ค ์์์ผ ํ์ฃ . ์ค๋์ ๋ธ๋์น ๋ง๋ค๊ธฐ โ ์ปค๋ฐ โ PR ์์ฑ โ ๋ฆฌ๋ทฐ ๋ฐ์(์์ ์ปค๋ฐ/๋ฆฌ๋ฒ ์ด์ค) โ ๋จธ์ง๊น์ง, ์ด๋ณด์๋ ๊ทธ๋๋ก ๋ฐ๋ผ ํ ์ ์๊ฒ ํ ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค.
์ค๋น๋ฌผ: ์ต์ํ ์ด๊ฒ๋ง ์์ผ๋ฉด ๋ฉ๋๋ค
- Git ์ค์น, GitHub ๊ณ์
- ๋ก์ปฌ์ ํด๋ก ๋ ์ ์ฅ์(Repository)
- ์๊ฒฉ ๊ธฐ๋ณธ ๋ธ๋์น๊ฐ
main์ด๋ผ๊ณ ๊ฐ์ (ํ๋ก์ ํธ์ ๋ฐ๋ผmaster์ผ ์๋ ์์ด์)
1) ๋ธ๋์น ์์ฑ: โ์์ ์ ๋ฌด์กฐ๊ฑด ๊ฐ์ง์น๊ธฐ๋ถํฐโ
๊ธฐ๋ณธ ๋ธ๋์น์์ ๋ฐ๋ก ์์ ํ๋ฉด, ๋์ค์ ๋๋๋ฆฌ๊ธฐ ์ด๋ ต๊ณ ์ถฉ๋๋ ์ปค์ง๋๋ค. ์์ ๋จ์๋ง๋ค ๋ธ๋์น 1๊ฐ๊ฐ ๊ธฐ๋ณธ์ด์์.
git switch main git pull origin main git switch -c feature/add-greeting
๋ธ๋์น ์ด๋ฆ์ ๋ณดํต feature/, fix/, refactor/์ฒ๋ผ ๋ชฉ์ ์ด ๋ณด์ด๊ฒ ์ง์ต๋๋ค. ๋์ค์ PR ๋ชฉ๋ก์์ ํ๋์ ๋ค์ด์์.
2) ์ฝ๋ ์์ ์์: ์์ ๋ณ๊ฒฝ์ผ๋ก ์ค์ตํด๋ณด๊ธฐ
์๋ฅผ ๋ค์ด app.js์ ๊ฐ๋จํ ์ธ์ฌ ํจ์๋ฅผ ์ถ๊ฐํด๋ณผ๊ฒ์.
// app.js
export function greet(name) {
return `Hello, ${name}!`;
}
๊ฐ๋ฅํ๋ฉด PR ํ๋์๋ ํ ๊ฐ์ง ๋ชฉ์ ๋ง ๋ด๋ ๊ฒ ์ข์ต๋๋ค. ๋ฆฌ๋ทฐ์ด๋ ์ดํดํ๊ธฐ ์ฝ๊ณ , ์น์ธ๋ ๋นจ๋ผ์.
3) ์ปค๋ฐ: โ์๋ฏธ ์๋ ๋จ์๋ก, ๋ฉ์์ง๋ ๋ช ํํ๊ฒโ
๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ธํ๊ณ ์ปค๋ฐํฉ๋๋ค.
git status
git add app.js
git commit -m "feat: add greet function"
์ปค๋ฐ ๋ฉ์์ง๋ ๋ฌด์์ ์ ํ๋์ง๊ฐ ํต์ฌ์
๋๋ค.
์: fix: handle null name in greet, refactor: extract greeting formatter
4) ์๊ฒฉ์ผ๋ก ํธ์ & PR ๋ง๋ค๊ธฐ
๋ธ๋์น๋ฅผ ์๊ฒฉ์ ์ฌ๋ฆฝ๋๋ค.
git push -u origin feature/add-greeting
์ดํ GitHub์์ PR์ ์์ฑํฉ๋๋ค. PR ์ ๋ชฉ/๋ณธ๋ฌธ์ ์ด๋ ๊ฒ ์ฐ๋ฉด ์ข์์.
PR ์ ๋ชฉ ์์
feat: greet ํจ์ ์ถ๊ฐ
PR ๋ณธ๋ฌธ ์์ ํ ํ๋ฆฟ
- ๋ณ๊ฒฝ ์ฌํญ: greet(name) ํจ์ ์ถ๊ฐ
- ํ ์คํธ: ๋ก์ปฌ์์ ๊ฐ๋จ ํธ์ถ๋ก ํ์ธ
- ์ฐธ๊ณ : ๊ธฐ์กด ์ฝ๋ ์ํฅ ์์ ๋ฆฌ๋ทฐ์ด๋ PR ๋ณธ๋ฌธ๋ง ์ฝ๊ณ ๋ ์ํฉ์ ํ์ ํ ์ ์์ด์ผ ํฉ๋๋ค.
5) ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ๊ธฐ: ์์ฃผ ๋์ค๋ ํผ๋๋ฐฑ ํจํด
๋ฆฌ๋ทฐ์์ ํํ ๋์ค๋ ์ฝ๋ฉํธ๋ ๋๋ต ์ด 3๊ฐ์ง์ ๋๋ค.
- ๋ค์ด๋ฐ/๊ฐ๋ ์ฑ: ํจ์๋ช , ๋ณ์๋ช , ์ฃผ์ ์์น
- ์์ธ ์ฒ๋ฆฌ: null/๋น ๋ฌธ์์ด, ํ์ ๊ฐ์
- ๊ตฌ์กฐ ๊ฐ์ : ์ค๋ณต ์ ๊ฑฐ, ์ฑ ์ ๋ถ๋ฆฌ ์๋ฅผ ๋ค์ด โname์ด ๋น์ด์์ผ๋ฉด ์ด๋ป๊ฒ ๋ผ์?โ๋ผ๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ์๋ค๊ณ ํด๋ณผ๊ฒ์.
6) ๋ฆฌ๋ทฐ ๋ฐ์: ์์ ์ปค๋ฐ์ผ๋ก ์ ๋ฐ์ดํธํ๊ธฐ
์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ๊ณ ์น๊ณ , ๊ฐ์ ๋ธ๋์น์ ์ปค๋ฐํ๋ฉด PR์ ์๋์ผ๋ก ๋ฐ์๋ฉ๋๋ค.
// app.js
export function greet(name) {
const safeName = (name ?? "").trim();
if (!safeName) return "Hello!";
return `Hello, ${safeName}!`;
}
git add app.js
git commit -m "fix: handle empty name in greet"
git push
๋ฆฌ๋ทฐ ์ฝ๋ฉํธ์๋ ์ด๋ ๊ฒ ๋ตํ๋ฉด ์ข์์.
- โ๋ง์ํด์ฃผ์ ์ผ์ด์ค ๋ฐ์ํ์ต๋๋ค. ๋น ๋ฌธ์์ด/๊ณต๋ฐฑ์ ๊ธฐ๋ณธ ์ธ์ฌ๋ก ์ฒ๋ฆฌํ์ต๋๋ค.โ ์ค์: โ๋ฐ์ํ์ต๋๋คโ๋ก ๋๋ด์ง ๋ง๊ณ , ์ด๋ป๊ฒ ๋ฐ์ํ๋์ง๋ฅผ ํ ์ค ๋ ์ ์ผ๋ฉด ์ ๋ขฐ๋๊ฐ ํ ์ฌ๋ผ๊ฐ๋๋ค.
7) ๋ง์ง๋ง ์ ๋ฆฌ: ๋จธ์ง ์ ์ฒดํฌ๋ฆฌ์คํธ
PR์ด ์น์ธ๋๊ธฐ ์ ์ ์๋๋ฅผ ์ ๊ฒํ์ธ์.
๋ถํ์ํ ํ์ผ(๋น๋ ์ฐ์ถ๋ฌผ, ๋ก๊ทธ) ์ปค๋ฐ ์ ๋๋?
๋ณ๊ฒฝ ๋ฒ์๊ฐ PR ๋ชฉ์ ๊ณผ ์ผ์นํ๋?
์ถฉ๋(conflict) ๊ฐ๋ฅ์ฑ ์๋? (ํ์ ์ main ์ต์ ํ)
main ์ต์ ํ๊ฐ ํ์ํ๋ฉด:
git switch main git pull origin main git switch feature/add-greeting git merge main
์ถฉ๋์ด ๋๋ฉด ํ์ผ์ ์ด์ด ์ง์ ์ ๋ฆฌํ ๋ค ์ปค๋ฐํ๊ณ ํธ์ํ๋ฉด ๋ฉ๋๋ค.
8) ๋จธ์ง ์ดํ: ๋ธ๋์น ์ ๋ฆฌ๊น์ง๊ฐ ํ ์ฌ์ดํด
๋จธ์ง๊ฐ ๋๋๋ฉด ๋ธ๋์น๋ฅผ ์ ๋ฆฌํฉ๋๋ค(์ ํ์ด์ง๋ง ๊ถ์ฅ).
git switch main git pull origin main git branch -d feature/add-greeting
์๊ฒฉ ๋ธ๋์น ์ญ์ ๋ GitHub์์ ๋ฒํผ์ผ๋ก ์ง์ฐ๊ฑฐ๋, ๋ช ๋ น์ด๋ก๋ ๊ฐ๋ฅํฉ๋๋ค.
๋ง๋ฌด๋ฆฌ: PR์ โ์ฝ๋ ์ ์ถโ์ด ์๋๋ผ โ๋ํ์ ์์โ
PR์ ๋ง๋ค๊ณ ๋ฆฌ๋ทฐ๋ฅผ ๋ฐ๋ ๊ณผ์ ์ ๋จ์ํ ์น์ธ์ ๋ฐ๋ ์ ์ฐจ๊ฐ ์๋๋ผ, ํ์ ์ฝ๋ ํ์ง์ ๋ง์ถ๊ณ ๊ฐ๋ฐ ์ต๊ด์ ๊ต์ ํ๋ ํ๋ จ์ ๋๋ค. ์ฒ์์ ์ฝ๋ฉํธ๊ฐ ๋ง์๋ ์ ์์ด์์. ์ค์ํ ๊ฑด ๋ฐฉ์ดํ์ง ์๊ณ , ์ฌํํ๊ณ , ๊ณ ์น๊ณ , ์ค๋ช ํ๋ ํ๋ฆ์ ์ตํ๋ ๊ฒ. ์ด ๋ฃจํด์ด ๋ชธ์ ๋ถ์ผ๋ฉด ๊ฐ๋ฐ ์ค๋ ฅ์ด ์ ๋ง ๋น ๋ฅด๊ฒ ์ฌ๋ผ๊ฐ๋๋ค.
โฌ๏ธ ์ด ๊ธ์ด ๋์์ด ๋์ จ๋ค๋ฉด, ์๋ ๊ด๊ณ ๋ฅผ ํ ๋ฒ๋ง ํด๋ฆญํด์ฃผ์ธ์! ์ ์๊ฒ ํฐ ํ์ด ๋ฉ๋๋ค ๐โโ๏ธ โฌ๏ธ