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

Manassarn Manoonchai
2 min readMay 2, 2022

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 แน่นอน

ตัวอย่างของการมีหลาย Commit

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 ดูวิธีเซ็ตอัปได้ที่นี่

ใช้ Github Action เพื่อสร้าง One Repo One Commit

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

#ไม่ได้แซะใครนะ

Sign up to discover human stories that deepen your understanding of the world.

Responses (3)

Write a response