Git Commit: มาสเตอร์คลาส

เผยแพร่แล้ว: 2023-02-26
แล็ปท็อปบนพื้นหลังสีน้ำเงินแสดงพรอมต์คำสั่ง Linux
fatmawati achmad zaenuri/Shutterstock.com
คำสั่ง Git commit จะเก็บสำเนาของการเปลี่ยนแปลงจากไดเร็กทอรีการทำงานของคุณในที่เก็บ Git ของคุณ แต่ยังสามารถใช้เพื่อแก้ไขคอมมิทที่มีอยู่และเพื่อคืนค่าคอมมิทได้อีกด้วย

ข้อกำหนดพื้นฐานของระบบควบคุมเวอร์ชันคือการจัดเก็บไฟล์เวอร์ชันต่างๆ ไว้ให้คุณ ใน 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 ส่วนกลาง

ในการตรวจสอบว่าชื่อของคุณถูกตั้งค่าแล้ว ให้ใช้คำสั่งนี้

 git config --global user.name 

ตรวจสอบชื่อผู้ใช้ส่วนกลางของ Git

หากคุณต้องการใช้ชื่ออื่นในที่เก็บเฉพาะ ให้เปลี่ยนเป็นไดเร็กทอรีของโปรเจ็กต์และใช้คำสั่งเดียวกันโดยไม่มีอ็อพชัน --global

 git config user.name "แมคเคย์ เดวิด"
 git กำหนดค่า user.name 

การตั้งชื่อผู้ใช้ Git เฉพาะที่เก็บ

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

ในทำนองเดียวกัน เราสามารถตั้งค่าที่อยู่อีเมลส่วนกลางหรือสำหรับที่เก็บเดียวโดยรวมหรือละเว้นตัวเลือก --global

 git config user.email "[email protected]"
 git config --global user.email "[email protected]"
 git กำหนดค่า user.email
 git config --global user.email 

การตั้งค่าที่อยู่อีเมลผู้ใช้เริ่มต้น Git ส่วนกลางและเฉพาะพื้นที่เก็บข้อมูล

การตั้งค่าเหล่านี้ถูกเก็บไว้ในไฟล์ปรับแต่ง การตั้งค่า Global Git จะอยู่ใน “~/.gitconfig” และการตั้งค่าเฉพาะที่เก็บจะอยู่ในไฟล์ “.git/config” ของที่เก็บ

คำสั่ง commit อ้างอิงและใช้ค่าเหล่านี้ขณะดำเนินการ

การใช้คำสั่งคอมมิต

การใช้งานพื้นฐานของคำสั่ง commit คือการรับไฟล์ที่อยู่ในพื้นที่ staging ซึ่งเรียกว่าดัชนี และจัดเก็บเป็นไฟล์ที่กระทำในสาขาปัจจุบันของที่เก็บ

ความมุ่งมั่นขั้นพื้นฐาน

เรามีโครงการพร้อมไฟล์ที่เปลี่ยนแปลง เราจะใช้คำสั่ง add เพื่อจัดฉากไฟล์ จากนั้นจึงคอมมิตไฟล์ เรากำลังใช้ตัวเลือก -m (ข้อความยืนยัน) เพื่อให้เราสามารถให้คำอธิบายสั้น ๆ เกี่ยวกับวัตถุประสงค์ของการเปลี่ยนแปลง หากเราไม่ใช้ตัวเลือกนี้ ระบบจะแจ้งข้อความคอมมิตเมื่อคอมมิตเกิดขึ้น สะดวกกว่าที่จะเพิ่มในบรรทัดคำสั่ง

 git เพิ่ม jibber.c
 git commit -m "อัปเดตข้อความช่วยเหลือ" 

การจัดเตรียมและการคอมมิตไฟล์เดียว

หากเราใช้คำสั่ง git log เราจะสามารถตรวจสอบรายละเอียดของคอมมิชชันตามลำดับเวลา โดยคอมมิชชันล่าสุดจะอยู่ด้านบนสุดของรายการ

 บันทึกคอมไพล์ 

ตรวจสอบบันทึกที่เก็บ Git

คอมมิชชันจะแสดงเป็น less

การกระทำล่าสุดที่ด้านบนสุดของบันทึก Git

คอมมิตถูกแท็กด้วยชื่อและที่อยู่อีเมลที่เราให้ไว้ก่อนหน้านี้ และข้อความคอมมิตของเราก็จะถูกบันทึกด้วย

ไฟล์จัดเตรียมอัตโนมัติ

การจัดเตรียมไฟล์จำนวนมากอาจใช้เวลาเล็กน้อย วิธีการอื่นคือการใช้ตัวเลือก -A (ทั้งหมด) กับ add

ขั้นตอนนี้จะจัดไฟล์ ที่แก้ไข ทั้งหมดพร้อมกับไฟล์ ที่ไม่ได้ติดตาม ทั้งหมดโดยอัตโนมัติ การจัดเตรียมไฟล์ที่ไม่ได้ติดตามเป็นไปตามการตั้งค่าในไฟล์ ".gitignore" ของคุณ Git จะไม่จัดลำดับไฟล์ที่คุณบอกว่าไม่ต้องการรวม สุดท้าย ไฟล์ในดัชนีที่ไม่อยู่ในไดเร็กทอรีการทำงานจะ ถูกลบออก จากดัชนี

เห็นได้ชัดว่า -A ตัวเลือกสามารถทำให้เกิดหลายอย่างพร้อมกันได้ ตัวเลือก --dry-run จะแสดงตัวอย่างการเปลี่ยนแปลงโดยไม่ต้องดำเนินการจริง

 git เพิ่ม -A --dry-run 

ใช้ --dry-run เพื่อดูตัวอย่างไฟล์ที่จะจัดฉากและไม่จัดฉาก

ในตัวอย่างของเรา จะแสดงไฟล์ที่มีอยู่ที่แก้ไขแล้วสองไฟล์ และไฟล์ใหม่สองไฟล์ ไปข้างหน้าและใช้ตัวเลือก -A ก่อนที่เราจะใช้คำสั่ง commit

 คอมไพล์เพิ่ม -A
 git commit -m "การแยกวิเคราะห์ขั้นสูง" 

ยอมรับไฟล์ที่เปลี่ยนแปลงและสร้างขึ้นใหม่ หลังจากใช้ตัวเลือกเพิ่ม -A

เราจะเห็นว่ามีการเปลี่ยนแปลงทั้งหมดสี่ไฟล์ สองไฟล์เป็นไฟล์ที่สร้างขึ้นใหม่ซึ่งอยู่ในรายการ

การจัดเตรียมและความมุ่งมั่นในเวลาเดียวกัน

คำสั่ง commit มีตัวเลือกตัวพิมพ์เล็ก -a (ทั้งหมด) สิ่งนี้ดำเนินการจัดเตรียมและยอมรับไฟล์ในขั้นตอนเดียว

ตัวเลือก commit -a ขั้นตอนและคอมมิตไฟล์ ที่มีอยู่ ที่แก้ไข และ ลบ ไฟล์ออกจากดัชนีหากไฟล์เหล่านั้นถูกลบออกจากไดเร็กทอรีการทำงานของคุณ มัน ไม่ได้ จัดไฟล์ที่ไม่ได้ติดตามโดยอัตโนมัติ

เช่นเดียวกับคำสั่ง add คำสั่ง commit มีตัวเลือก --dry-run ที่ให้คุณดูตัวอย่างการทำงานก่อนที่จะดำเนินการ

 git commit -a --dry-run 

การใช้ตัวเลือก commit -a เพื่อดูตัวอย่างการเปลี่ยนแปลงโดยไม่ต้องดำเนินการ

ตอนนี้มาดำเนินการตามคำสั่ง

 git commit -a --dry-run 

การใช้ตัวเลือก commit -a เพื่อกำหนดขั้นตอนและกระทำในขั้นตอนเดียว

ไฟล์เหล่านี้จัดทำขึ้นและมุ่งมั่นเพื่อเรา

ผูกพันกับสาขาอื่น

หากคุณได้ทำการเปลี่ยนแปลงบางอย่างกับไฟล์ในไดเร็กทอรีงานของคุณ แล้วพบว่าคุณไม่ได้ชำระเงินในสาขาที่ถูกต้อง คุณต้องดำเนินการแก้ไขกับสาขาที่ถูกต้องโดยไม่กระทบกับสาขาปัจจุบัน

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 เราจะเห็นสิ่งนี้

บันทึก Git พร้อมประเภทที่เน้น

ในการแก้ไข เราจะใช้ --amend ตัวเลือกเช่นนี้

 git commit --amend -m "การระบุวลีที่ปรับให้เหมาะสม" 

ใช้ตัวเลือก commit --amend เพื่อแก้ไขข้อความยืนยัน

หากเราใช้ git log อีกครั้ง เราจะเห็นว่าคอมมิทเก่าถูกแทนที่ด้วยคอมมิตใหม่พร้อมข้อความคอมมิตที่แก้ไข

บันทึก Git แสดงข้อความยืนยันการแก้ไข

หากเราต้องการเพิ่มไฟล์ที่เราลืมแสดง เราสามารถคอมมิตไฟล์นั้นเพื่อให้ไฟล์นั้นปรากฏเป็นส่วนหนึ่งของคอมมิตก่อนหน้า

เราจะใช้ 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 staging area

เราจำเป็นต้องส่งไฟล์อื่น ๆ ที่เหลืออยู่ในดัชนี

 git commit -m "ปรับแต่งการทดลอง" 

คอมมิตไฟล์ที่ยังคงอยู่ในพื้นที่จัดเตรียม

อีกสองไฟล์ที่อยู่ในการคอมมิตดั้งเดิมนั้นคอมมิตใหม่ให้เรา

ที่เกี่ยวข้อง: วิธีแก้ไข แก้ไข หรือเลิกทำ Git Commits (เปลี่ยนประวัติ Git)

การคืนค่าคอมมิชชันทั้งหมด

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

เราจำเป็นต้องใช้รหัสอ้างอิงที่แฮชของคอมมิชชัน เราสามารถค้นหาสิ่งนี้ได้โดยใช้ git log :

บันทึก Git ที่มีตัวระบุการคอมมิตถูกเน้น

คัดลอกการอ้างอิงนั้นและใช้ในคำสั่ง revert :

 คอมไพล์เปลี่ยน e5bd4560aef8164c6ca9d6d4620b9db7f66aecc8 

การย้อนกลับการกระทำที่ระบุโดยรหัสการกระทำ

การดำเนินการนี้จะเปิดตัวแก้ไขเริ่มต้นเพื่อให้คุณสามารถแก้ไขข้อความย้อนกลับได้ มีการป้อนข้อความเริ่มต้นสำหรับคุณ คุณสามารถใช้สิ่งนี้หรือแก้ไขตามที่คุณต้องการ

แก้ไขข้อความย้อนกลับโดยเน้นข้อความเริ่มต้น

เมื่อคุณพอใจกับข้อความย้อนกลับแล้ว ให้บันทึกไฟล์และออกจากตัวแก้ไข ในนาโน คุณทำได้โดยใช้ “Ctrl+O” และ “Ctrl+X”

การดำเนินการย้อนกลับเสร็จสิ้น เลิกทำการกระทำทั้งหมด

การใช้ git log อีกครั้ง เราจะเห็นว่ามีการเพิ่มการคอมมิตใหม่ที่ยกเลิกการเปลี่ยนแปลงการคอมมิตที่เปลี่ยนกลับ

มีด Git Swiss Army

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

ที่เกี่ยวข้อง: วิธีใช้การผสาน Git