Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม

Git Commit: คำสั่งบันทึกการเปลี่ยนแปลง

การบันทึกการเปลี่ยนแปลงใน Git repository ไม่ได้ง่ายแค่ save ไฟล์ Git ใช้วิธีติดตามการเปลี่ยนแปลงที่ซับซ้อนกว่า ให้นักพัฒนาควบคุมการเปลี่ยนแปลงได้ละเอียดกว่า

คำสั่ง git commit เป็นขั้นตอนหนึ่งในการ "บันทึก" การเปลี่ยนแปลงไปยัง repository ใช้ git add สร้าง record ของการเปลี่ยนแปลงที่จะเก็บใน commit แล้ว git commit สร้าง commit ด้วยการเปลี่ยนแปลงเหล่านั้น สุดท้าย git push ส่ง commit ไป central repository

บทช่วยสอนนี้สำรวจการใช้ git commit สร้าง commits พร้อมตัวอย่าง จนจบคุณจะเชี่ยวชาญ git commit

Git Commits คืออะไร?

Commits เป็นส่วนสำคัญของ Git version control system

คิดว่า commits คือ snapshot ของโปรเจกต์ในช่วงเวลาหนึ่ง เมื่อสร้าง commit จะบันทึกว่าไฟล์และโฟลเดอร์ทั้งหมดในโปรเจกต์มีสถานะอย่างไรในขณะนั้น

Record นี้อ่านได้ในอนาคต เพื่อดูว่าโปรเจกต์เคยมีลักษณะอย่างไร ใครเปลี่ยนอะไร ไฟล์ไหน บ้าง Commits สำคัญเพราะให้บันทึกประวัติการพัฒนาของ repository อย่างครบถ้วน

ไม่เหมือนระบบควบคุมเวอร์ชันอื่นๆ commit ไม่ส่งผลต่อ central repository จนกว่าคุณจะพร้อม ทำหน้าที่เป็นช่องว่างระหว่างการเปลี่ยนแปลง local repo และ main repo

กล่าวคือ แทนที่จะต้องเปลี่ยน main repo โดยตรง (ซึ่งอาจมีผู้ร่วมงานหลายคนกำลังดู) นักพัฒนาสามารถ commit ใน local repo แล้ว push ไป main repo ภายหลัง

การสร้าง commit เป็นขั้นตอนที่สองจากท้ายของการ "บันทึก" การเปลี่ยนแปลงใน Git หลังสร้าง commit ขั้นต่อไปคือ git push ส่งการเปลี่ยนแปลงไป central repository

วิธีใช้ Git Commit

คำสั่ง git commit บันทึก staged changes ทั้งหมดไปยัง local repository

"Staged changes" หมายถึงไฟล์ทั้งหมดใน staging area ที่เพิ่มด้วย git add (อ่านเพิ่มได้จาก beginner's guide to git add)

git commit (พื้นฐาน)

การใช้งานพื้นฐาน:

git commit

คำสั่งนี้ commit staged changes ไป local repository จะเปิด text editor ให้พิมพ์ commit message ระบุการเปลี่ยนแปลงสรุปสั้นๆ หลังปิด editor commit จะถูกสร้าง

git commit -a

Flag -a (all) stage ไฟล์ที่แก้ไขทั้งหมดอัตโนมัติพร้อม commit

สมมติมีไฟล์ CONTRIBUTORS.md ที่ commit ไปแล้ว หากแก้ไขไฟล์นี้ ใช้ git commit -a stage และ commit การเปลี่ยนแปลงได้เลย ข้าม git add บนไฟล์ที่แก้ไขแล้ว เพราะ -a สั่ง stage ไฟล์ modified ทั้งหมด แต่ ไฟล์ใหม่ (new files) จะไม่ถูก stage ต้อง git add ก่อน

ไวยากรณ์:

git commit -a

git commit -m

Flag -m (message) ใช้เพิ่ม commit message โดยตรง ไม่ต้องเปิด text editor

ไวยากรณ์:

git commit -m "feat: commit message"

ระบุ flag -m แล้วตามด้วยข้อความในเครื่องหมายคำพูด ในตัวอย่าง message คือ "feat: commit message"

ตัวอย่าง Git Commit

สมมติแก้ไขไฟล์ app.py ในโปรเจกต์ เพิ่มฟังก์ชัน runApp() ต้องการ commit

ขั้นแรก add ไฟล์เข้า staging area:

git add app.py

ตอนนี้ app.py อยู่ใน staging area พร้อม commit

Commit พร้อม message:

git commit -m "feat: Add runApp() function"

คำสั่งสร้าง commit พร้อมการเปลี่ยนแปลงของ app.py Message อธิบายสรุปการเปลี่ยนแปลง

แก้ไข Commit ล่าสุด (Amend a Git Commit)

git commit ยังอนุญาตให้แก้ไข commit ล่าสุดด้วย option --amend

สมมติ commit แล้วแต่ลืม add __init__.py แก้ไข commit ก่อนหน้าให้รวมไฟล์นี้:

git add __init__.py
git commit --amend -m "feat: Add runApp() function and update init file"

คำสั่ง amend commit ก่อนหน้า รวม __init__.py และอัปเดต message ใหม่

Flag --amend ใช้บ่อยเพราะง่ายที่จะพลาดเวลา versioning เช่น ลืม stage ไฟล์, typo ใน message, หรือ message ไม่ครอบคลุมการเปลี่ยนแปลงสำคัญ

เขียน Commit Message ที่ดี (Writing a Good Commit Message)

Commit message จำเป็นต้องมีเมื่อใช้ git commit แม้จะเขียนอะไรก็ได้ แตาควรคิดให้ดีว่าเขียนอะไร

ไม่มีกติกาแข็งข้ามแตมี best practices สำหรับ commit messages ที่สม่ำเสมอและ descriptive:

  • ตัวอักษรแรกของ subject line ให้เป็นตัวใหญ่ (Capitalize)
  • จำกัด subject line ไม่เกิน 50 ตัวอักษร
  • ใช้ body ของ commit อธิบาย "เปลี่ยนอะไร" (what) มากกว่า "ทำไม" (why)
  • แต่ละบรรทัดใน body ไม่เกิน 72 ตัวอักษร

ปฏิบัติตามข้อนี้ จะได้ commit messages อ่านง่าย เข้าใจง่าย

นอกจากนี้ อาจอ้างอิง issues หรือ pull requests ใน commit message เช่น commit แก้ issue #22 ให้ title "fix: resolves issue #22" และอธิบายใน body ว่าแก้ไขอย่างไร

สรุป

คำสั่ง git commit ใช้ย้ายไฟล์จาก staging area ไป commit รันหลัง git add (add ไฟล์เข้า staging) git commit สร้าง snapshot การเปลี่ยนแปลง ซึ่ง push ไป main repository เมื่อพร้อม

บทช่วยสอนนี้อธิบายการใช้ git commit สร้าง commits ตอนนี้คุณพร้อมใช้ git commit อย่างเชี่ยวชาญแล้ว!