| name | git-teacher-review |
| description | Automated review request workflow โ handles branch creation, commit, push, and PR creation as one step. Hides Git branch jargon from users and presents it as "a safe workspace to show your teammates." Korean triggers โ "PR ๋ง๋ค์ด์ค", "๊ฒํ ์์ฒญ", "๋ฆฌ๋ทฐ ์์ฒญ", "์์ ์ ์", "ํ์ํํ
๋ณด์ฌ์ฃผ๊ณ ์ถ์ด", "ํ์ธ ์์ฒญ". English triggers โ "create PR", "pull request", "request review", "show teammates". |
๊ฒํ ์์ฒญํ๊ธฐ โ Phase 5 (๋ฐ๋ฅด๋ค ๊น์ ์ โ Codex)
Branch ์์ฑ โ Commit โ Push โ PR ์์ฑ์ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ค. Branch ๊ฐ๋
์ ์ฌ์ฉ์์๊ฒ ์จ๊ธฐ๊ณ "์์ ํ ์์
๊ณต๊ฐ"์ผ๋ก ์ค๋ช
ํ๋ค.
์ค๋ช
ยท๊ต์ก ์ git-teacher-help์ ยง๊ต์ก ์์น(shared/questioning-policy.md ยง3 Teaching)์ ๋ฐ๋ฅธ๋ค. "๊ฒํ ์์ฒญ(PR)"์ Google Docs "์์ ์ ์" ๋ชจ๋ ๋น์ ๋ก ์ค๋ช
ํ๋ค. ๊ฒ๋จน์ ์ด๋ณด๋ฉด ์์ท ๊ธ์ง(ยง2a), ๊ทธ๋ฅ PR๋ง ์ํ๋ฉด ๊ฐ์ ์์ด ์งํ(ยง2c).
Codex CLI์๋ AskUserQuestion ์นด๋ UI๊ฐ ์๋ค. ๊ฒฐ์ ์ด ํ์ํ ๊ณณ์ shared/questioning-policy.md ยงA์ ์ฑํ
๋ฒํธํ ์ ํ์ง ๋ธ๋ก์ผ๋ก ๋ฌป๋๋ค.
์คํ ์์
Step 1: ๋ณ๋ ฌ ์ํ ์์ง
๋ค์ ๋ช
๋ น์ ๋ณ๋ ฌ๋ก(๊ฐ๋ฅํ ํ ํจ๊ป) ์คํํ๋ค:
git rev-parse --is-inside-work-tree
git symbolic-ref --short HEAD
git status --porcelain
git rev-list --count @{u}..HEAD 2>/dev/null || git rev-list --count HEAD 2>/dev/null
git remote get-url origin 2>/dev/null
gh auth status 2>&1
Step 2: ์์ ๊ฒ์ฌ
.git ์์: "์ฌ๊ธฐ๋ Git ํ๋ก์ ํธ ํด๋๊ฐ ์๋์์. '๊น ์์ํด์ค'๋ก ๋จผ์ ์ค์ ํ์ธ์." โ ์ค๋จ
- Detached HEAD: "์์ ํ ์์น์์ ๋ฒ์ด๋ฌ์ด์. ์๋์ผ๋ก ๋์๊ฐ๊ฒ์." โ
git checkout main (๋๋ master) ์คํ ํ ์ฌ์๋
- ์๊ฒฉ ์ ์ฅ์ ์์: "GitHub์ ์ฐ๊ฒฐ๋์ด ์์ง ์์์. '๊น ์์ํด์ค'๋ก ๋จผ์ ์ค์ ํ์ธ์." โ ์ค๋จ
- gh ๋ฏธ๋ก๊ทธ์ธ: "GitHub CLI์ ๋ก๊ทธ์ธ๋์ด ์์ง ์์์. '๊น ์์ํด์ค'๋ก ์ค์ ํ์ธ์." โ ์ค๋จ
- Merge Conflict (
UU, AA ๋ฑ ๊ฐ์ง ์): ์ถฉ๋ ํด๊ฒฐ ์๋ด (์๋ "์ถฉ๋ ํด๊ฒฐ" ์น์
์ฐธ์กฐ) โ ์ค๋จ
- ๋ณ๊ฒฝ ์ฌํญ ํ๋จ: ์๋ ๋ ์กฐ๊ฑด์ ๋ชจ๋ ํ์ธํ๋ค:
git status --porcelain ๊ฒฐ๊ณผ (์์ ๋ ํ์ผ ์กด์ฌ ์ฌ๋ถ)
git rev-list --count @{u}..HEAD ๊ฒฐ๊ณผ (์ฌ๋ฆฌ์ง ์์ commit ์กด์ฌ ์ฌ๋ถ; upstream ๋ฏธ์ค์ ์ ์ ์ฒด commit ์๋ก ๋์ฒด)
- ๋ ๋ค ๋น์ด์์ผ๋ฉด: "๋ณ๊ฒฝ๋ ํ์ผ๋ ์๊ณ , ์ฌ๋ฆฌ์ง ์์ ์ ์ฅ๋ ์์ด์. ํ์ผ์ ์์ ํ ๋ค ๋ค์ ์๋ํ์ธ์." โ ์ค๋จ
- ์์ ๋ ํ์ผ์ ์์ง๋ง ๋ฏธ์ ์ก commit์ด ์์ผ๋ฉด: ์ด๋ฏธ ์ ์ฅ(save)๋ ๋ด์ฉ์ผ๋ก PR ์งํ (Step 5์์ commit ์คํต)
- ์ด๋ฏธ main/master๊ฐ ์๋ branch์ ์์: ํ์ฌ branch์์ ๊ทธ๋๋ก ์งํ (์ branch ์์ฑ ์คํต)
Step 3: ์์
์ค๋ช
์์ฒญ
๋จผ์ ๋น์ ๋ก ์์ฌ์ํจ๋ค:
๊ฒํ ์์ฒญ(PR)์ ๋ง๋ค์ด๋ณผ๊ฒ์.
Google Docs์์ "์์ ์ ์" ๋ชจ๋ ์์์ฃ ?
์๋ณธ์ ๊ทธ๋๋ก ๋๊ณ , "์ด๋ ๊ฒ ๋ฐ๊พธ๋ฉด ์ด๋จ๊น์?" ํ๊ณ ๋ณด๋ด๋ ๊ฑฐ์์.
๊ทธ๋ค์ ์ฑํ
๋ฒํธํ ์ ํ์ง๋ก ๋ฌป๋๋ค (shared/questioning-policy.md ยงA) โ diff๋ ์ต๊ทผ commit์์ ์ค๋ช
์ ์ถ๋ก ํ ์ ์์ผ๋ฉด ๋ฌป์ง ์๊ณ ์ถ๋ก ์์ ์ ์ํ๊ณ ํ์ธ๋ง ๋ฐ๋๋ค:
์ง๋ฌธ: ์ด๋ค ์์
์ ํ๋์ง ํ ์ค๋ก ์ ์ด์ฃผ์ธ์.
1. ์ง์ ์
๋ ฅ โ ํ ์ค๋ก ์๋ ค์ฃผ์ธ์ (์: "๋ฉ์ธ ํ์ด์ง ๋์์ธ ๋ณ๊ฒฝ", "์คํ ์์ ")
2. ์๋ ์์ฑ โ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ถ์ํด์ ์ค๋ช
์ ์๋์ผ๋ก ๋ง๋ค์ด์
3. ๋ฌธ์ฅ์ผ๋ก ์ง์ ์์ ์์ฒญ
Step 4: Branch ์์ฑ (์ฌ์ฉ์์๊ฒ ์จ๊น)
ํ์ฌ branch๊ฐ main ๋๋ master์ธ ๊ฒฝ์ฐ์๋ง ์ branch๋ฅผ ์์ฑํ๋ค:
git checkout -b {slug}/{date}
Branch ์ด๋ฆ ๊ท์น:
- ์ฌ์ฉ์ ์
๋ ฅ์ slugํ: "๋ฉ์ธ ํ์ด์ง ๋์์ธ ๋ณ๊ฒฝ" โ
main-page-design
- ๋ ์ง ์ถ๊ฐ:
main-page-design/0222
- ํ๊ตญ์ด๋ ์์ด๋ก ๊ฐ๋จํ ๋ณํํ๊ฑฐ๋ ๋ก๋ง์ํ
์ฌ์ฉ์์๊ฒ๋: "์์ ํ ์์
๊ณต๊ฐ์ ๋ง๋ค์์ด์. ์ฌ๊ธฐ์๋ ๋ง์๊ป ์์ ํด๋ ์๋ณธ์ ์ํฅ์ด ์์ด์."
์ด๋ฏธ ์ ์ฅ๋(commit) ๋ด์ฉ์ ์ branch๋ก ์ฎ๊ธฐ๋ ๊ฒฝ์ฐ:
main์์ ์ด๋ฏธ commit๋ ์ํ๋ผ๋ฉด, branch๋ฅผ ๋ง๋ ๋ค main์ commit์ ๋๋๋ ค์ผ ํ๋ค.
๋ฏธ์ ์ก commit ์๋ Step 1์์ ์์งํ git rev-list --count ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ๋ค:
git checkout -b {slug}/{date}
git checkout main
git reset --soft HEAD~{๋ฏธ์ ์ก commit ์}
git checkout {slug}/{date}
์ฃผ์: ์ด ๊ณผ์ ์์ ๊ธฐ์กด ๊ฐ๋ณ commit ๋ฉ์์ง๋ค์ ํ๋๋ก ํฉ์ณ์ง๋ค (squash ํจ๊ณผ).
๋น๊ฐ๋ฐ์์๊ฒ๋ ์คํ๋ ค ๊น๋ํ ๊ฒฐ๊ณผ๋ฅผ ์ ๊ณตํ๋ฏ๋ก ์๋๋ ๋์์ด๋ค.
(์ฌ๊ธฐ์ ์ฐ๋ reset --soft๋ ๋ณ๊ฒฝ ๋ด์ฉ์ staging์ ๋จ๊ธฐ๋ ์์ ํ ๋ฐฉ์์ด๋ค โ reset --hard๊ฐ ์๋๋ค.)
Step 5: Commit + Push
์์ ๋ ํ์ผ์ด ์๋ ๊ฒฝ์ฐ์๋ง commitํ๋ค (์ด๋ฏธ ์ ์ฅ๋ ๊ฒฝ์ฐ ์คํต):
git add -A
git commit -m "์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์์
์ค๋ช
"
git push origin HEAD
Step 6: PR ์์ฑ
gh pr create --title "์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์์
์ค๋ช
" --body "$(cat <<'EOF'
## ๋ณ๊ฒฝ ๋ด์ฉ
{์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์์
์ค๋ช
}
---
Created by ๋ฐ๋ฅด๋ค ๊น์ ์
EOF
)"
Step 7: main์ผ๋ก ๋ณต๊ท
PR ์์ฑ ํ, ์์ ํ๊ณ ์๋ main/master๊ฐ ์์๋ ๊ฒฝ์ฐ์๋ง main branch๋ก ๋์๊ฐ๋ค:
git checkout main
Step 8: ์์์ฆ ์ถ๋ ฅ
๊ฒํ ์์ฒญ ์๋ฃ!
๋งํฌ: https://github.com/username/my-project/pull/1
์ด ๋งํฌ๋ฅผ ํ์์๊ฒ ๋ณด๋ด๋ฉด, ๋ณ๊ฒฝ ๋ด์ฉ์ ํ์ธํ๊ณ
"์ข์์, ๋ฐ์ํด์ฃผ์ธ์" ํ๊ณ ์น์ธํ ์ ์์ด์.
์ง๊ธ์ ์๋ ์์น(main)๋ก ๋์์จ ์ํ์์.
์๋ก์ด ์์
์ ์์ํ๋ ค๋ฉด ํ์ผ์ ์์ ํ ๋ค "์ ์ฅํด์ค"๋ผ๊ณ ํ์ธ์.
์ด๋ฏธ ๋ณ๋ branch์ ์๋ ๊ฒฝ์ฐ
Step 2์์ ํ์ฌ branch๊ฐ main/master๊ฐ ์๋ ๊ฒฝ์ฐ:
- Step 4(branch ์์ฑ)๋ฅผ ์คํต
- ํ์ฌ branch์์ ๋ฐ๋ก commit โ push โ PR ์์ฑ ์งํ
- "์ด๋ฏธ ์์
๊ณต๊ฐ์ ์์ด์, ๋ฐ๋ก ๊ฒํ ์์ฒญ์ ๋ง๋ค๊ฒ์."
์ถฉ๋ ํด๊ฒฐ
Merge Conflict ๊ฐ์ง ์ ์ถฉ๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ , ์ฑํ
๋ฒํธํ ์ ํ์ง๋ก ๋ฌป๋๋ค (shared/questioning-policy.md ยงA):
๋ ์ฌ๋์ด ๊ฐ์ ํ์ผ์ ๊ฐ์ ๋ถ๋ถ์ ๋์์ ๊ณ ์ณ์ ์ถฉ๋์ด ์๊ฒผ์ด์.
์ถฉ๋ ํ์ผ: {ํ์ผ ๋ชฉ๋ก}
์ง๋ฌธ: ์ด๋ป๊ฒ ํ ๊น์?
1. ๋ด๊ฐ ์์ ํ ๊ฑธ๋ก ์ ์ง โ ๋ด ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฌ์ฉํด์
2. ์๋๋ฐฉ์ด ์์ ํ ๊ฑธ๋ก ์ ์ง โ ์๋๋ฐฉ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฌ์ฉํด์
3. ๋ฌธ์ฅ์ผ๋ก ์ง์ ์์ ์์ฒญ
์ ํ์ ๋ฐ๋ผ:
- "๋ด ๊ฑฐ ์ ์ง":
git checkout --ours {ํ์ผ} โ git add {ํ์ผ}
- "์๋๋ฐฉ ๊ฑฐ ์ ์ง":
git checkout --theirs {ํ์ผ} โ git add {ํ์ผ}
์ถฉ๋ ํ์ผ์ด ์ฌ๋ฌ ๊ฐ์ผ ๊ฒฝ์ฐ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ ์ผ๊ด ์ฒ๋ฆฌํ๋ค.
์ค๋ฅ ์ฒ๋ฆฌ
- PR ์ด๋ฏธ ์กด์ฌ: "์ด ์์
๊ณต๊ฐ์ ๊ฒํ ์์ฒญ์ด ์ด๋ฏธ ์์ด์." โ ๊ธฐ์กด PR URL ์๋ด (์๋ก ๋ง๋ค์ง ์๋๋ค)
- push ์คํจ: upload ์คํฌ์ ์ค๋ฅ ์ฒ๋ฆฌ์ ๋์ผํ๊ฒ ์๋ด
- gh pr create ์คํจ: "๊ฒํ ์์ฒญ ์์ฑ์ ์คํจํ์ด์." โ
gh auth status ์ฌํ์ธ ์๋ด
Safety
git reset --hard๋ ์ฌ์ฉํ์ง ์๋๋ค (branch ์ด๋ ์์๋ reset --soft๋ง ์ฌ์ฉ).
- ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํ์ง ์์ผ๋ฉด commit๋ ํ์คํ ๋ฆฌ๋ฅผ ์ฌ์์ฑํ์ง ์๋๋ค.
- ๊ฐ์ branch์ ์ด๋ฏธ PR์ด ์์ผ๋ฉด ์๋ก ๋ง๋ค์ง ์๊ณ ๊ธฐ์กด PR URL์ ๋ณด์ฌ์ค๋ค.