- name
- git-teacher-save
- description
- Commits changed files to Git, explained in plain language for non-developers. Runs `git add -A` + `git commit` and describes what was saved. Korean triggers โ "์ ์ฅํด์ค", "์ปค๋ฐ", "์ปค๋ฐํด์ค", "๋ณ๊ฒฝ ๋ด์ฉ ์ ์ฅ", "์ง๊ธ๊น์ง ํ ๊ฑฐ ์ ์ฅ", "์ธ์ด๋ธ". English triggers โ "save", "commit", "save my work".
# ์ ์ฅํ๊ธฐ โ Phase 3 (๋ฐ๋ฅด๋ค ๊น์ ์ โ Codex)
๋ณ๊ฒฝ๋ ํ์ผ์ Commit (์ ์ฅ)ํ๋ค. `git add -A` + `git commit`์ ์คํํ๊ณ , ์ฌํ์ ๋ฌด์์ ํ๋์ง ์ค๋ช
ํ๋ค.
> ์ค๋ช
ยท๊ต์ก ์ `git-teacher-help`์ ยง๊ต์ก ์์น(`shared/questioning-policy.md` ยง3 Teaching)์ ๋ฐ๋ฅธ๋ค. "Commitํ๋ฉด GitHub์ ์ฌ๋ผ๊ฐ๋ค"๋ ์ค๊ฐ๋
์ ๋น์ +์ง๋ฌธ์ผ๋ก ๊ต์ ํ๋ค(ยง2a). ์ฌ์ฉ์๊ฐ ๊ทธ๋ฅ ์ ์ฅ๋ง ๋นจ๋ฆฌ ์ํ๋ฉด ๊ฐ์ํ์ง ์๋๋ค(ยง2c).
> Codex CLI์๋ ๊ฐ๊ด์ ์นด๋ UI๊ฐ ์๋ค. ๊ฒฐ์ ์ด ํ์ํ ๊ณณ์ `shared/questioning-policy.md` ยงA์ **์ฑํ
๋ฒํธํ ์ ํ์ง ๋ธ๋ก**์ผ๋ก ๋ฌป๋๋ค.
## ์คํ ์์
### Step 1: ๋ณ๋ ฌ ์ํ ์์ง
๋ค์ ๋ช
๋ น์ **๋ณ๋ ฌ๋ก(๊ฐ๋ฅํ ํ ํจ๊ป)** ์คํํ๋ค:
```bash
git rev-parse --is-inside-work-tree # .git ์กด์ฌ ํ์ธ
git symbolic-ref --short HEAD # ํ์ฌ branch
git status --porcelain # ๋ณ๊ฒฝ ํ์ผ ๋ชฉ๋ก
git diff --stat # ๋ณ๊ฒฝ ํต๊ณ
ls .gitignore 2>/dev/null # .gitignore ์กด์ฌ ์ฌ๋ถ
```
### Step 2: ์์ ๊ฒ์ฌ
1. **`.git` ์์**: "์ฌ๊ธฐ๋ Git ํ๋ก์ ํธ ํด๋๊ฐ ์๋์์. '๊น ์์ํด์ค'๋ก ๋จผ์ ์ค์ ํ์ธ์." โ ์ค๋จ
2. **Detached HEAD**: "์์ ํ ์์น์์ ๋ฒ์ด๋ฌ์ด์." โ `git checkout main` ์คํ ํ ์ฌ์๋
3. **Merge Conflict** (`UU`, `AA` ๋ฑ): ์ถฉ๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ , ์ฑํ
๋ฒํธํ ์ ํ์ง๋ก ๋ฌป๋๋ค (`shared/questioning-policy.md` ยงA):
```text
์ถฉ๋์ด ์์ด์ ๋ฐ๋ก ์ ์ฅํ ์ ์์ด์. ๋ ์ฌ๋์ด ๊ฐ์ ๋ถ๋ถ์ ๋์์ ๊ณ ์ณค๊ฑฐ๋ ์.
์ถฉ๋ ํ์ผ: {ํ์ผ ๋ชฉ๋ก}
์ง๋ฌธ: ์ด๋ป๊ฒ ํ ๊น์?
1. ๋ด๊ฐ ์์ ํ ๊ฑธ๋ก ์ ์ง โ ๋ด ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฌ์ฉํด์
2. ์๋๋ฐฉ์ด ์์ ํ ๊ฑธ๋ก ์ ์ง โ ์๋๋ฐฉ์ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ฌ์ฉํด์
3. ๋ฌธ์ฅ์ผ๋ก ์ง์ ์์ ์์ฒญ
```
์ ํ์ ๋ฐ๋ผ:
- "๋ด๊ฐ ์์ ํ ๊ฑธ๋ก ์ ์ง": `git checkout --ours {ํ์ผ}` โ `git add {ํ์ผ}`
- "์๋๋ฐฉ์ด ์์ ํ ๊ฑธ๋ก ์ ์ง": `git checkout --theirs {ํ์ผ}` โ `git add {ํ์ผ}`
์ถฉ๋ ํด๊ฒฐ ํ ์๋์ผ๋ก ์ ์ฅ(commit) ๋จ๊ณ๋ก ์งํํ๋ค.
4. **๋ณ๊ฒฝ ์ฌํญ ์์**: "์ ์ฅํ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ด์. ํ์ผ์ ์์ ํ ๋ค ๋ค์ ์๋ํ์ธ์." โ ์ค๋จ
### Step 3: .gitignore ์๋ ์์ฑ
`.gitignore`๊ฐ ์์ผ๋ฉด ํ๋ก์ ํธ ํ์
์ ๊ฐ์งํ์ฌ ๊ธฐ๋ณธ `.gitignore`๋ฅผ ์์ฑํ๋ค:
- Node.js (`package.json` ์กด์ฌ) โ `node_modules/`, `.env`, `dist/` ๋ฑ
- Python (`requirements.txt` ๋๋ `pyproject.toml` ์กด์ฌ) โ `__pycache__/`, `.env`, `venv/` ๋ฑ
- ์ผ๋ฐ โ `.env`, `.DS_Store`, `*.log`, `thumbs.db` ๋ฑ
์์ฑ ํ ์๋ด: "๋ณด์์ ์ํด .gitignore ํ์ผ์ ๋ง๋ค์์ด์. ๋น๋ฐ๋ฒํธ๋ ์์ ํ์ผ์ ์๋์ผ๋ก ์ ์ธ๋ฉ๋๋ค."
### Step 4: ๋ณ๊ฒฝ ํ์ผ ์๋ด + ์ปค๋ฐ ๋ฉ์์ง ์์ฒญ
๋ณ๊ฒฝ๋ ํ์ผ ๋ชฉ๋ก์ ๋ณด์ฌ์ค ๋ค ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ๋ฌผ์ด๋ณธ๋ค.
`git status --porcelain` ๊ฒฐ๊ณผ๋ก ํ์ผ ๋ชฉ๋ก์ **๋์ ์์ฑ**ํ์ฌ ๋จผ์ ๋ณด์ฌ์ฃผ๊ณ , ์ฑํ
๋ฒํธํ ์ ํ์ง๋ก ๋ฌป๋๋ค (`shared/questioning-policy.md` ยงA):
```text
๋ณ๊ฒฝ๋ ํ์ผ N๊ฐ:
- file1 (์์ ๋จ)
- file2 (์ ํ์ผ)
์ง๋ฌธ: ๋ญ ๋ฐ๊ฟจ๋์ง ํ ์ค๋ก ์ ์ด์ฃผ์ธ์.
1. ์ง์ ์
๋ ฅ โ ํ ์ค๋ก ์๋ ค์ฃผ์ธ์ (์: "๋ก๊ณ ๋ณ๊ฒฝ", "๋ฉ์ธ ํ์ด์ง ์์ ")
2. ์๋ ์์ฑ โ ๋ณ๊ฒฝ ๋ด์ฉ์ ๋ถ์ํด์ ๋ฉ์์ง๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์
3. ๋ฌธ์ฅ์ผ๋ก ์ง์ ์์ ์์ฒญ
```
**์ฌ์ฉ์๊ฐ ๋น ๊ฐ์ด๋ ์ ๋งคํ ๋ต์ ์ฃผ๋ฉด**: ๋ณ๊ฒฝ ๋ด์ฉ(diff)์ ๋ถ์ํ์ฌ ์งง์ ์์ฐ์ด ๋ฉ์์ง๋ฅผ ์๋ ์์ฑํ๋ค.
### Step 5: ์ ์ฅ ์คํ
```bash
git add -A
git commit -m "์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๋ฉ์์ง"
```
์ปค๋ฐ ๋ฉ์์ง ๊ท์น:
- ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์์ฐ์ด ๊ทธ๋๋ก ์ฌ์ฉ (conventional commits ๊ฐ์ ํ์ง ์์)
- ํ๊ตญ์ด/์์ด ๋ชจ๋ ํ์ฉ
- ์: "๋ก๊ณ ๋ณ๊ฒฝ", "๋ฉ์ธ ํ์ด์ง ์์ ", "์คํ ๊ณ ์นจ"
### Step 6: ์์์ฆ ์ถ๋ ฅ
์คํ ํ ๊ฒฐ๊ณผ๋ฅผ ์๋ ค์ค๋ค:
```
์ ์ฅ ์๋ฃ! ํ์ผ 3๊ฐ๋ฅผ ํฌ์ฅํด์ '๋ก๊ณ ๋ณ๊ฒฝ'์ด๋ผ๊ณ ๊ธฐ๋กํ์ด์.
์์ง ๋ด ์ปดํจํฐ์๋ง ์์ด์.
GitHub ํด๋ผ์ฐ๋์๋ ์ฌ๋ฆฌ๋ ค๋ฉด "์ฌ๋ ค์ค"๋ผ๊ณ ํ์ธ์.
```
## ํต์ฌ ๊ฐ์กฐ์ฌํญ
- ์ ์ฅ ํ **๋งค๋ฒ** "์์ง ๋ด ์ปดํจํฐ์๋ง ์์ด์" ๋ฆฌ๋ง์ธ๋
- Commit๊ณผ Push์ ์ฐจ์ด๋ฅผ ์ฒด๊ฐํ๊ฒ ํจ โ ๊ฒ๋จน์ ์ด๋ณด๋ฉด "๋ฐฉ๊ธ ์ ์ฅํ ๊ฑด ์ด๋์ ์๋ ๊ฑธ๊น์?"๋ก ํ ๋ฒ ๋ ํ์ธ(ยง2a)
- ๋ค์ ํ๋(Push)์ ์๋ด
## Safety
- `git reset --hard` ๊ฐ์ ํ๊ดด์ ๋ช
๋ น์ ์ ๋ ์คํํ์ง ์๋๋ค.
- ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์์ฒญํ์ง ์์ผ๋ฉด ํ์คํ ๋ฆฌ๋ฅผ ์ฌ์์ฑํ์ง ์๋๋ค.
- ์ฌ์ฉ์์ ๋ฌด๊ดํ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ณด์กดํ๋ค.
View on GitHub