Git Commit: มาสเตอร์คลาส
เผยแพร่แล้ว: 2023-02-26
ข้อกำหนดพื้นฐานของระบบควบคุมเวอร์ชันคือการจัดเก็บไฟล์เวอร์ชันต่างๆ ไว้ให้คุณ ใน Git คำสั่งที่ทำสิ่งนี้คือ commit
นี่คือทุกสิ่งที่คุณจำเป็นต้องรู้
Commit ใน Git คืออะไร?
การกำหนดค่าคำสั่งคอมมิชชัน
การใช้คำสั่งคอมมิต
ความมุ่งมั่นขั้นพื้นฐาน
ไฟล์จัดเตรียมอัตโนมัติ
การจัดเตรียมและความมุ่งมั่นในเวลาเดียวกัน
ผูกพันกับสาขาอื่น
การเปลี่ยนแปลงความมุ่งมั่น
การลบการเปลี่ยนแปลงออกจากคอมมิต
การคืนค่าคอมมิชชันทั้งหมด
มีด Git Swiss Army
Commit ใน Git คืออะไร?
Commits คือชุดของสแน็ปช็อตที่สร้างขึ้นตลอดวงจรชีวิตของโครงการซึ่งประกอบกันเป็นประวัติการพัฒนา Commits คือสิ่งที่ช่วยให้เราสามารถแยกเวอร์ชันของโครงการได้เหมือนที่เคยเป็นในจุดต่างๆ ในอดีต เหตุใดจึงสำคัญ
ระบบควบคุมเวอร์ชัน (VCS) มักใช้กับซอฟต์แวร์ซอร์สโค้ดและโครงการพัฒนา แต่สามารถใช้กับคอลเลคชันไฟล์ข้อความต่างๆ ได้สำเร็จ เช่น ไฟล์ Markdown ที่มีบทต่างๆ ของหนังสือ
คุณอาจไม่ต้องการให้ VCS จัดการทุกไฟล์ในไดเร็กทอรีโปรเจ็กต์ของคุณ ดังนั้นคุณต้องสามารถเสนอชื่อไฟล์ที่คุณต้องการให้ควบคุมเวอร์ชันได้ สิ่งนี้จะเพิ่มไปยังมุมมองการควบคุมเวอร์ชันของโครงการ พวกเขาจะถูกตรวจสอบการเปลี่ยนแปลง
อีกวิธีในการบรรลุเป้าหมายนี้คือการใช้รายการละเว้น สิ่งนี้จะบอก Git ว่าไฟล์ ไดเร็กทอรี หรือประเภทของไฟล์ใดที่ควรละเว้นเสมอ
เมื่อเวลาผ่านไป เมื่อมีการเพิ่มไฟล์ใหม่ในโครงการ ไฟล์บางไฟล์จะต้องมีการเพิ่มลงในระบบควบคุมเวอร์ชัน ใน Git สิ่งนี้ถูกจัดการโดยคำสั่ง add
ที่จริงแล้ว คำสั่ง add
ทำหน้าที่ double service ดังที่เราจะเห็น
เพื่อรักษาประวัติการเปลี่ยนแปลงที่เกิดขึ้นในโครงการ คุณจะต้องขอให้ Git จัดเก็บภาพรวมของสถานะของโครงการเป็นระยะๆ โดยใช้คำสั่ง commit
นี่คือที่ที่คำสั่ง add
ปรากฏขึ้นอีกครั้งในเวิร์กโฟลว์ของเรา เราใช้คำสั่ง add
เพื่อบอก Git ว่าไฟล์ ที่เปลี่ยนแปลง ใดที่เราต้องการรวมไว้ในสแน็ปช็อต จากนั้นเราก็ใช้ commit
เพื่อบอกให้ Git สร้าง snapshot
การกำหนดค่าคำสั่งคอมมิชชัน
ข้อมูลเกี่ยวกับการคอมมิตจะถูกเก็บไว้กับมัน เพื่อให้รู้ได้เสมอว่าใครเป็นผู้คอมมิท เมื่อไร และคอมมิทประกอบด้วยอะไรบ้าง ข้อมูลเมตานี้บางส่วนถูกบันทึกในเวลาคอมมิต เช่น ข้อความคอมมิต
ข้อมูลเมตาที่เกี่ยวข้องกับตัวตนของสมาชิกในทีมพัฒนาสามารถกำหนดค่าได้โดยผู้ใช้แต่ละคน เพื่อป้องกันการให้ข้อมูลเดิมซ้ำๆ
ในการตั้งชื่อโดยรวมของคุณสำหรับที่เก็บทั้งหมดบนคอมพิวเตอร์ของคุณ ให้ใช้คำสั่งนี้
git config --global user.name "Dave McKay"
ในการตรวจสอบว่าชื่อของคุณถูกตั้งค่าแล้ว ให้ใช้คำสั่งนี้
git config --global user.name
หากคุณต้องการใช้ชื่ออื่นในที่เก็บเฉพาะ ให้เปลี่ยนเป็นไดเร็กทอรีของโปรเจ็กต์และใช้คำสั่งเดียวกันโดยไม่มีอ็อพชัน --global
git config user.name "แมคเคย์ เดวิด"
git กำหนดค่า user.name
ขณะนี้เรามีชื่อผู้ใช้เริ่มต้นที่แตกต่างกันสำหรับที่เก็บนี้ และชื่อร่วมของเรายังคงใช้สำหรับที่เก็บอื่น
ในทำนองเดียวกัน เราสามารถตั้งค่าที่อยู่อีเมลส่วนกลางหรือสำหรับที่เก็บเดียวโดยรวมหรือละเว้นตัวเลือก --global
git config user.email "[email protected]"
git config --global user.email "[email protected]"
git กำหนดค่า user.email
git config --global user.email
การตั้งค่าเหล่านี้ถูกเก็บไว้ในไฟล์ปรับแต่ง การตั้งค่า Global Git จะอยู่ใน “~/.gitconfig” และการตั้งค่าเฉพาะที่เก็บจะอยู่ในไฟล์ “.git/config” ของที่เก็บ
คำสั่ง commit
อ้างอิงและใช้ค่าเหล่านี้ขณะดำเนินการ
การใช้คำสั่งคอมมิต
การใช้งานพื้นฐานของคำสั่ง commit
คือการรับไฟล์ที่อยู่ในพื้นที่ staging ซึ่งเรียกว่าดัชนี และจัดเก็บเป็นไฟล์ที่กระทำในสาขาปัจจุบันของที่เก็บ
ความมุ่งมั่นขั้นพื้นฐาน
เรามีโครงการพร้อมไฟล์ที่เปลี่ยนแปลง เราจะใช้คำสั่ง add
เพื่อจัดฉากไฟล์ จากนั้นจึงคอมมิตไฟล์ เรากำลังใช้ตัวเลือก -m
(ข้อความยืนยัน) เพื่อให้เราสามารถให้คำอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของการเปลี่ยนแปลง หากเราไม่ใช้ตัวเลือกนี้ ระบบจะแจ้งข้อความคอมมิตเมื่อคอมมิตเกิดขึ้น สะดวกกว่าที่จะเพิ่มในบรรทัดคำสั่ง
git เพิ่ม jibber.c
git commit -m "อัปเดตข้อความช่วยเหลือ"
หากเราใช้คำสั่ง git log
เราจะสามารถตรวจสอบรายละเอียดของคอมมิชชันตามลำดับเวลา โดยคอมมิชชันล่าสุดจะอยู่ด้านบนสุดของรายการ
บันทึกคอมไพล์
คอมมิชชันจะแสดงเป็น less
คอมมิตถูกแท็กด้วยชื่อและที่อยู่อีเมลที่เราให้ไว้ก่อนหน้านี้ และข้อความคอมมิตของเราก็จะถูกบันทึกด้วย
ไฟล์จัดเตรียมอัตโนมัติ
การจัดเตรียมไฟล์จำนวนมากอาจใช้เวลาเล็กน้อย วิธีการอื่นคือการใช้ตัวเลือก -A
(ทั้งหมด) กับ add
ขั้นตอนนี้จะจัดไฟล์ ที่แก้ไข ทั้งหมดพร้อมกับไฟล์ ที่ไม่ได้ติดตาม ทั้งหมดโดยอัตโนมัติ การจัดเตรียมไฟล์ที่ไม่ได้ติดตามเป็นไปตามการตั้งค่าในไฟล์ ".gitignore" ของคุณ Git จะไม่จัดลำดับไฟล์ที่คุณบอกว่าไม่ต้องการรวม สุดท้าย ไฟล์ในดัชนีที่ไม่อยู่ในไดเร็กทอรีการทำงานจะ ถูกลบออก จากดัชนี
เห็นได้ชัดว่า -A
ตัวเลือกสามารถทำให้เกิดหลายอย่างพร้อมกันได้ ตัวเลือก --dry-run
จะแสดงตัวอย่างการเปลี่ยนแปลงโดยไม่ต้องดำเนินการจริง
git เพิ่ม -A --dry-run
ในตัวอย่างของเรา จะแสดงไฟล์ที่มีอยู่ที่แก้ไขแล้วสองไฟล์ และไฟล์ใหม่สองไฟล์ ไปข้างหน้าและใช้ตัวเลือก -A
ก่อนที่เราจะใช้คำสั่ง commit
คอมไพล์เพิ่ม -A
git commit -m "การแยกวิเคราะห์ขั้นสูง"
เราจะเห็นว่ามีการเปลี่ยนแปลงทั้งหมดสี่ไฟล์ สองไฟล์เป็นไฟล์ที่สร้างขึ้นใหม่ซึ่งอยู่ในรายการ
การจัดเตรียมและความมุ่งมั่นในเวลาเดียวกัน
คำสั่ง commit
มีตัวเลือกตัวพิมพ์เล็ก -a
(ทั้งหมด) สิ่งนี้ดำเนินการจัดเตรียมและยอมรับไฟล์ในขั้นตอนเดียว

ตัวเลือก commit -a
ขั้นตอนและคอมมิตไฟล์ ที่มีอยู่ ที่แก้ไข และ ลบ ไฟล์ออกจากดัชนีหากไฟล์เหล่านั้นถูกลบออกจากไดเร็กทอรีการทำงานของคุณ มัน ไม่ได้ จัดไฟล์ที่ไม่ได้ติดตามโดยอัตโนมัติ
เช่นเดียวกับคำสั่ง add
คำสั่ง commit มีตัวเลือก --dry-run
ที่ให้คุณดูตัวอย่างการทำงานก่อนที่จะดำเนินการ
git commit -a --dry-run
ตอนนี้มาดำเนินการตามคำสั่ง
git commit -a --dry-run
ไฟล์เหล่านี้จัดทำขึ้นและมุ่งมั่นเพื่อเรา
ผูกพันกับสาขาอื่น
หากคุณได้ทำการเปลี่ยนแปลงบางอย่างกับไฟล์ในไดเร็กทอรีงานของคุณ แล้วพบว่าคุณไม่ได้ชำระเงินในสาขาที่ถูกต้อง คุณต้องดำเนินการแก้ไขกับสาขาที่ถูกต้องโดยไม่กระทบกับสาขาปัจจุบัน
Git ไม่มีคำสั่งสำหรับการยืนยันไปยังสาขาอื่น แต่คุณสามารถแก้ไขสถานการณ์นี้ได้ด้วยความคล่องแคล่วของ Git เล็กน้อย
เราจะใช้คำสั่ง Git stash
เพื่อทำสำเนาการเปลี่ยนแปลง จากนั้นเราจะตรวจสอบสาขาที่ถูกต้องและใช้การเปลี่ยนแปลงจากที่ซ่อน หากต้องการนำการเปลี่ยนแปลงที่ซ่อนไว้ไปใช้ เราใช้คำสั่ง pop
แทนคำสั่ง apply
คำสั่ง pop
ใช้การเปลี่ยนแปลงและลบออกจากที่ซ่อนด้วย
เราได้ทำการเปลี่ยนแปลงบางอย่างในสาขา new-parser
ของที่เก็บของเรา พวกเขาควรทำในสาขา classic-parser
ซ่อนคอมไพล์
git ชำระเงิน classic-parser
git ซ่อนป๊อป
ขณะนี้เราสามารถดำเนิน commit
และอัปเดตสาขานี้
git commit -a -m "เพิ่มฟังก์ชันตัวแยกวิเคราะห์ล่วงหน้า"
หากเรากลับไปที่สาขา new-parser
เราจะเห็นว่าเป็นเวอร์ชันล่าสุด หมายความว่าการเปลี่ยนแปลงถูกลบออกจากไดเร็กทอรีการทำงานของคุณแล้ว และที่เก็บข้อมูลและไฟล์ของคุณซิงค์กัน
git ชำระเงิน new-parser
สถานะคอมไพล์
ที่เกี่ยวข้อง: วิธีอัปเดตและดูแลแยกสาขา Git
การเปลี่ยนแปลงความมุ่งมั่น
หากคุณต้องการปรับปรุงข้อความคอมมิชชันของคุณ—บางทีคุณอาจพบข้อผิดพลาดในนั้น—หรือคุณลืมจัดลำดับไฟล์ที่ควรรวมไว้ในคอมมิต คุณสามารถใช้ตัวเลือก --amend
เพื่อแก้ไขให้ถูกต้อง ข้อแม้คือไม่ควรใช้กับการกระทำที่ถูกผลักไปยังที่เก็บระยะไกล
ในข้อความยืนยันล่าสุดของเรา "fraze" ควรเป็น "วลี" ถ้าเราใช้ git log
เราจะเห็นสิ่งนี้
ในการแก้ไข เราจะใช้ --amend
ตัวเลือกเช่นนี้
git commit --amend -m "การระบุวลีที่ปรับให้เหมาะสม"
หากเราใช้ git log
อีกครั้ง เราจะเห็นว่าคอมมิทเก่าถูกแทนที่ด้วยคอมมิตใหม่พร้อมข้อความคอมมิตที่แก้ไข
หากเราต้องการเพิ่มไฟล์ที่เราลืมแสดง เราสามารถคอมมิตไฟล์นั้นเพื่อให้ไฟล์นั้นปรากฏเป็นส่วนหนึ่งของคอมมิตก่อนหน้า
เราจะใช้ add
เพื่อจัดลำดับไฟล์ จากนั้นทำการยืนยันด้วยตัวเลือก --amend
ตัวเลือก --no-edit
หมายความว่าเราไม่จำเป็นต้องระบุข้อความยืนยันใหม่ ข้อความยืนยันก่อนหน้าจะถูกเก็บไว้
git เพิ่ม jibber.c
git commit --amend --no-แก้ไข
การลบการเปลี่ยนแปลงออกจากคอมมิต
หากคุณจัดฉากและคอมมิตไฟล์ที่คุณไม่ได้ตั้งใจโดยไม่ได้ตั้งใจ คุณสามารถลบไฟล์นั้นออกจากคอมมิตได้โดยใช้คำสั่ง reset
เราจะรีเซ็ตคอมมิชชันกลับไปยังพื้นที่การแสดงละครหรือดัชนี จากนั้นเราจะลบไฟล์และคอมมิตไฟล์ที่เหลืออีกครั้ง
ในการรีเซ็ตการคอมมิตครั้งล่าสุดไปยังพื้นที่การแสดง เราใช้คำสั่ง reset --soft
HEAD~
เป็นคำชวเลขสำหรับ "การกระทำที่อยู่เบื้องหลัง HEAD ของไทม์ไลน์การกระทำโครงการ" หรือในภาษาอังกฤษ "การกระทำครั้งสุดท้าย"
คอมไพล์รีเซ็ต --soft HEAD~
ในการลบไฟล์ที่ไม่ควรรวมออก เราใช้คำสั่ง reset --mixed
วิธีนี้จะรีเซ็ตการเปลี่ยนแปลงเหล่านั้นกลับเข้าไปในไดเร็กทอรีการทำงาน สร้างไฟล์ที่แก้ไขใหม่เป็นไฟล์ที่ไม่ได้จัดลำดับและไม่ได้คอมมิต
git reset --mixed jibber.c
เราจำเป็นต้องส่งไฟล์อื่น ๆ ที่เหลืออยู่ในดัชนี
git commit -m "ปรับแต่งการทดลอง"
อีกสองไฟล์ที่อยู่ในการคอมมิตดั้งเดิมนั้นคอมมิตใหม่ให้เรา
ที่เกี่ยวข้อง: วิธีแก้ไข แก้ไข หรือเลิกทำ Git Commits (เปลี่ยนประวัติ Git)
การคืนค่าคอมมิชชันทั้งหมด
บางครั้งการเลิกทำคอมมิชชันทั้งหมดเป็นสิ่งที่ง่ายที่สุดที่จะทำ มันทำให้ไดเร็กทอรีการทำงานและที่เก็บข้อมูลของคุณกลับสู่สถานะเดิมก่อนที่คุณจะคอมมิต
เราจำเป็นต้องใช้รหัสอ้างอิงที่แฮชของคอมมิชชัน เราสามารถค้นหาสิ่งนี้ได้โดยใช้ git log
:
คัดลอกการอ้างอิงนั้นและใช้ในคำสั่ง revert
:
คอมไพล์เปลี่ยน e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8
การดำเนินการนี้จะเปิดตัวแก้ไขเริ่มต้นเพื่อให้คุณสามารถแก้ไขข้อความย้อนกลับได้ มีการป้อนข้อความเริ่มต้นสำหรับคุณ คุณสามารถใช้สิ่งนี้หรือแก้ไขตามที่คุณต้องการ
เมื่อคุณพอใจกับข้อความย้อนกลับแล้ว ให้บันทึกไฟล์และออกจากตัวแก้ไข ในนาโน คุณทำได้โดยใช้ “Ctrl+O” และ “Ctrl+X”
การใช้ git log
อีกครั้ง เราจะเห็นว่ามีการเพิ่มการคอมมิตใหม่ที่ยกเลิกการเปลี่ยนแปลงการคอมมิตที่เปลี่ยนกลับ
มีด Git Swiss Army
แน่นอนว่า commit
เป็นหนึ่งในคำสั่ง Git ที่สำคัญที่สุด มันสามารถทำอะไรได้มากมาย ดังนั้นจึงมีอะไรให้เรียนรู้อีกมาก การจัดการกับคุณสมบัติที่ใช้น้อยนั้นใช้เวลาอย่างคุ้มค่า เมื่อคุณต้องการแก้ไขข้อผิดพลาด—ตอนนี้—คุณจะดีใจที่ได้เตรียมการไว้ล่วงหน้า
ที่เกี่ยวข้อง: วิธีใช้การผสาน Git