5 ข้อดีของการมีแค่ 1 Git Commit และ 4+1 วิธีทำ One Repo One Commit (OROC)

1. Save space
คนที่ใช้ Git เป็นจะรู้ว่าการเก็บ Commit แต่ละครั้งนั้นจะมี Cost เกิดขึ้นเสมอ ยิ่งมี Commit มากเท่าไหร่ตัว .git
จะต้องเก็บ Diff มากขึ้นเท่านั้น เพราะฉะนั้นแล้วการมีแค่ Commit เดียวจะทำให้ประหยัดพื้นที่ในการเก็บไฟล์
2. Single source of truth
ความจริงควรมีเพียงหนึ่งเดียว หากมีหลาย Commit แล้วคนจะงงได้ การมี Commit เดียวทำให้ผู้ที่ Pull project มั่นใจได้ว่าโหลดเวอร์ชั่นล่าสุดไปแน่นอน และเร็วด้วยเพราะไม่ต้อง fetch history ของโปรเจคมา เพราะมันมีแค่นั้นแหละ
3. Prevent Bad Commit Tree
ที่ใดมีรัก ที่นั่นมีทุกข์ฉันใด ที่ใดมี Git ที่นั่นก็มี Commit Tree เกิดขึ้นฉันนั้น การทำให้มี 1 Commit จะลดความยุ่งเหยิงของ Tree ได้แบบ 300% เพราะว่ามันจะไม่เกิดการ Merge แน่นอน

4. Prevent Bad Commit Messages
เราอาจจะเคยเห็น Commit message ที่ไม่ค่อยมีประโยชน์เช่น Fix Bug
, Add feature
, ...
เหตผลก็เพราะว่าการตั้ง Commit message มันยากพอๆ กันกับการตั้งชื่อตัวแปรให้ดีๆ
หากเรามีแค่ 1 Commit เราก็ไม่ต้องมานั่งคิดว่าจะเขียน Message อย่างไร เพราะเราจะแก้มันเมื่อไหร่ก็ได้!
5. ได้ชื่อว่าใช้ Git เป็น
เพราะท่านว่าไว้ดังนี้
ถ้าทำให้ git เหลือ 1 commit ไม่ได้ ผมว่าพวกนี้ใช้ git ไม่เป็น
ส่วนวิธีการทำให้ Git repo มีแค่ 1 commit นั้นมีหลายวิธี จะขอยกมาสองถึงสามตัวอย่าง ดังนี้ (Update: ตอนนี้นึกออก 5 วิธีแล้ว แต่น่าจะมีอีก)
1. Git reset จนกว่าจะไม่เหลืออะไร แล้ว commit amend หนึ่งที
while git reset HEAD^; do :; done
git add -A
git commit --amend -m "Your commit message"
git push -f
2. Git reset แบบ one-liner
git reset $(git commit-tree HEAD^{tree} -m "Your commit message")
git push -f
3. เปลี่ยน Branch ใหม่มาแทน Branch เดิม
git branch -m main old_main
git checkout --orphan main
git branch -D old_main
git update-ref -d HEAD
git push -f
4. ล้าง .git แล้ว git init ใหม่
แนะนำวิธีนี้ เพราะ Clean ที่สุด มั่นใจได้แน่นอนว่าไม่มี Branch ตกค้าง
GIT_ORIGIN_BACKUP=$(git remote get-url origin)
rm -rf .git
git init
git remote add origin $GIT_ORIGIN_BACKUP
git add -A
git commit -m "Your commit message"
git push -f
5. ใช้ Github Action
วิธีนี้จะให้ Github Action narze/goragit
เป็นคนรวบรวม Commit ให้เราเองเมื่อมีการ Push ขึ้น Main ดูวิธีเซ็ตอัปได้ที่นี่

หากใครทำตามนี้ ก็จะถือว่าใช้ Git เป็นแล้วครับ Linus ผู้สร้าง Git จะยกนิ้วให้คุณ
#ไม่ได้แซะใครนะ