[Git] ว่าด้วยเลข commit

Teerayut Hiruntaraporn
2 min readSep 10, 2022

--

ในการใช้งาน git เมื่อเราใช้คำสั่ง git log git จะแสดงรายการที่เราได้ทำการเพิ่ม ลบ แก้ไข ภายใต้ git นั้น โดยในแต่ละรายการ จะมีค่าอยู่ด้านบนของรายการ ที่เรามักจะเรียกมันว่า เลข commit

โดยเลขที่ commit ในที่นี้ คือค่า checksum ที่เกิดโดยใช้ algorithm SHA-1 (และอยู่ในช่วงเปลี่ยนผ่านให้เป็น SHA-256)

การอ้างอิงเลขที่ commit

วิธีที่ง่ายที่สุดในการอ้างอิง commit ที่ถูกแก้ไขไป คือ การ copy เลขที่ commit มาทั้งดุ้น เช่น ถ้าเราต้องการ แสดงค่าที่เปลี่ยนไปใน commit ที่ต้องการ เราก็เพียงใช้คำสั่ง

> git show 4d02c8e72f2ca7fa63f71c2b5d2102c9920b3f1e 
commit 4d02c8e72f2ca7fa63f71c2b5d2102c9920b3f1e
Author: Markus ##### <####@####>
Date: Sat Jul 2 01:46:13 2011 +0200
fixed linkdiff --git a/README.markdown b/README.markdown
index ff4835a..d2ed57a 100644
--- a/README.markdown
+++ b/README.markdown

การย่อเลขที่ commit

เนื่องจากเลขที่ commit มีความ unique ในตัวเอง และสามารถอ้างอิง ได้ว่า งานที่เราได้ทำอยู่ใน จุดไหนของ version control เวลามีปัญหาก็จะสามารถอ้างอิงข้อมูลได้ถูกต้อง จึงนิยมที่จะนำเอามาใช้ในการอ้างอิง เลขที่ buld ในซอฟท์แวร์

อย่างไรก็ตามเนื่องจากความยาวของมัน ก็ทำให้เป็นที่ยากในการจดจำอยู่พอสมควร

แต่ว่า Git ก็ยังใจดี อนุญาตให้เราสามารถย่อเลขได้ โดยสามารถตัด String ส่วนหลังที่ยาวๆ นั้นให้เหลือขนาดสั้นๆ ได้ เช่น

❯ git show 4d02c8e72f2
commit 4d02c8e72f2ca7fa63f71c2b5d2102c9920b3f1e
Author: Markus ##### <####@####>
Date: Sat Jul 2 01:46:13 2011 +0200
fixed linkdiff --git a/README.markdown b/README.markdown
index ff4835a..d2ed57a 100644
--- a/README.markdown
+++ b/README.markdown

คำถามคือ แล้วเราจะอ้างอิงได้สั้นที่สุดกี่ตัว

Git อนุญาตให้เราย่อ String ได้ถึง 4 ตัว ครับ

❯ git show 4d02
commit 4d02c8e72f2ca7fa63f71c2b5d2102c9920b3f1e
Author: Markus ##### <####@####>
Date: Sat Jul 2 01:46:13 2011 +0200
fixed linkdiff --git a/README.markdown b/README.markdown
index ff4835a..d2ed57a 100644
--- a/README.markdown
+++ b/README.markdown

อย่างไรก็ตามก็ไม่ได้ recommend ที่ความยาวนี้มากนัก ด้วยความที่มันสั้นเหลือเกิน อาจจะเกิดการชนกัน(collision) กับ commit อื่นๆ ถ้างานที่เราทำมี commit เยอะมากๆ

ดังนั้น by default ถ้าเราใช้คำสั่งเช่น git rev-parse เราจะได้มา 7 ตัว

❯ git rev-parse — short HEAD
949b293

อย่างไรก็ตาม ในซอฟท์แวร์ที่มีการพัฒนาที่ยาวนาน เช่น Linux ที่มีจำนวน Commit มากถึง 30 ล้าน ค่า 7 ตัวอักษรอาจจะน้อยเกินไป และอาจจะเกิด commit ที่ ด้านหน้าเหมือนกันได้หลายตัว จึงมีการกำหนด default size เป็น 12

หรืออย่าง project ของ Git เองก็มีการกำหนดขนาดของ commit id เป็น 10

ดังนั้น ถ้าโปรเจคของเรา มีการ maintain ที่ยาวนาน มี commit ที่เยอะขึ้น อาจจะจำเป็นต้องเพิ่มเลข commit อ้างอิง ออก โดยสามารถตั้งได้โดย

git config --global core.abbrev 12

อ้างอิง

  1. https://lkml.org/lkml/2013/9/30/365

--

--

Teerayut Hiruntaraporn
Teerayut Hiruntaraporn

No responses yet