# สถานการณ์: Commit ไป Main แทน Feature
Main: C1 -> C2 -> C3 (ผิด: Feature Commit)
Feature: (ไม่มี)
# หลัง Cherry-pick
Main: C1 -> C2
Feature: C3 (ถูกต้อง)
# หลัง Reset
Main: C1 -> C2 (ถูกต้อง)
Feature: C3 (ถูกต้อง)
ป้องกัน Mistakes
- ตรวจสอบ Current Branch ก่อน Commit
- ใช้ Git Hooks เตือน Branch
- ใช้ Meaningful Branch Names
# ตรวจสอบ Current Branch
git branch -v
# ตรวจสอบ Status
git status
การแก้ไข Commit ผิด Branch ไม่ยาก แต่ป้องกันไว้ล่วงหน้าจะดีกว่า
Step-by-Step Example
# สถานการณ์: Commit ไป Main แทน Feature
Main: C1 -> C2 -> C3 (ผิด: Feature Commit)
Feature: (ไม่มี)
# ขั้นตอนที่ 1: ดูประวัติ Log
git log --oneline
# ขั้นตอนที่ 2: ใช้ Cherry-pick หรือ Reset
# วิธีที่ 1: Cherry-pick (copy C3 ไป Feature)
# วิธีที่ 2: Reset Main กลับไป C2
# จากนั้น Switch ไป Feature และ Cherry-pick หรือ Apply
# หลัง Cherry-pick
Main: C1 -> C2
Feature: C3 (ถูกต้อง)
# หลัง Reset
Main: C1 -> C2 (ถูกต้อง)
Feature: C3 (ถูกต้อง)
วิธีที่ 1: Cherry-pick Approach
# Step 1: ดูว่า Commit ไหน
git log --oneline Main
# Step 2: Switch ไป Feature
git switch feature-branch
# Step 3: Cherry-pick Commit ที่ผิด
git cherry-pick <commit-id-of-C3>
# Step 4: Switch กลับ Main และ Reset
git switch main
git reset --hard HEAD~1
# ผลลัพธ์:
# Main: C1 -> C2
# Feature: C3
วิธีที่ 2: Reset + Switch Approach
# Step 1: ดูประวัติ
git log --oneline
# Step 2: Reset Main กลับหนึ่งขั้น
git reset --hard HEAD~1
# Main กลับมาเป็น C1 -> C2
# Step 3: สร้าง Stash หรือ Branch สำหรับ C3
git switch feature-branch
git cherry-pick origin/main@{1} # Pick C3 ที่หลุด
# หรือ
git merge origin/main # Merge C3 เข้ามา
# ผลลัพธ์:
# Main: C1 -> C2
# Feature: C3
Common Scenario
# สถานการณ์จริง: Commit ไป Main โดยไม่ตั้งใจ
$ git log --oneline
c3a2b1f Add feature X (ผิด: ควรไป feature-X branch)
a2b1c0f Fix bug in login
1a2b3c0f Initial commit
# วิธีแก้ 1: Cherry-pick
$ git switch feature-X
$ git cherry-pick c3a2b1f
$ git switch main
$ git reset --hard a2b1c0f
# วิธีแก้ 2: Reset + Apply
$ git reset --hard a2b1c0f
$ git switch feature-X
$ git cherry-pick origin/main@{1}
# ตรวจสอบ
$ git log --oneline
main: a2b1c0f Fix bug in login
feature-X: c3a2b1f Add feature X
