คำสั่ง git log จะแสดงบันทึกของการคอมมิตในพื้นที่เก็บข้อมูล Git ตามค่าเริ่มต้น คำสั่ง git log จะแสดงแฮชคอมมิต ข้อความคอมมิต และข้อมูลเมตาคอมมิตอื่น ๆ คุณสามารถกรองผลลัพธ์ของบันทึก git ได้โดยใช้ตัวเลือกต่างๆ ป>
ระบบควบคุมเวอร์ชันมีวัตถุประสงค์หลักประการหนึ่ง นั่นคือเพื่อบันทึกว่าโค้ดเบสของคุณพัฒนาไปอย่างไรเมื่อเวลาผ่านไป สิ่งนี้ช่วยให้คุณเห็นว่าโครงการของคุณมีความก้าวหน้าอย่างไร คุณสามารถค้นหาได้ว่าใครมีส่วนร่วมในโครงการของคุณและระบุการเปลี่ยนแปลงที่เกิดขึ้นกับโค้ดของคุณและเมื่อใด
แต่คุณจะดูประวัติที่พื้นที่เก็บข้อมูล Git ของคุณสร้างขึ้นได้อย่างไร นั่นคือจุดที่คำสั่ง git log มีประโยชน์
บทช่วยสอนนี้จะหารือพร้อมตัวอย่างเกี่ยวกับพื้นฐานของคำสั่ง git log และวิธีที่คุณสามารถใช้คำสั่งดังกล่าวเพื่อตรวจสอบพื้นที่เก็บข้อมูล Git
คำสั่งบันทึกคอมไพล์
คำสั่ง git log จะแสดงรายการคอมมิตทั้งหมดที่ทำกับที่เก็บ คุณสามารถดูแฮชของคอมมิต Git แต่ละรายการ ข้อความที่เกี่ยวข้องกับคอมมิตแต่ละรายการ และข้อมูลเมตาเพิ่มเติมได้ คำสั่งนี้มีประโยชน์สำหรับการแสดงประวัติของที่เก็บ
ในขณะที่คำสั่งสถานะ git มุ่งเน้นไปที่ไดเร็กทอรีการทำงานปัจจุบัน บันทึก git ช่วยให้คุณสามารถดูประวัติของพื้นที่เก็บข้อมูลของคุณได้
ตัวอย่างคำสั่ง git log
มาดูตัวอย่างเพื่อแสดงให้เห็นว่าคำสั่ง git log ทำงานอย่างไร เรากำลังทำงานกับพื้นที่เก็บข้อมูลที่เรียกว่า "พื้นที่เก็บข้อมูลสาธิต" ตอนนี้เราต้องการดูรายการการคอมมิตทั้งหมดที่เราพุชไปยังที่เก็บของเรา เพื่อทำเช่นนั้น เราสามารถใช้คำสั่งนี้:
คำสั่ง git log จะส่งคืนรายการคอมมิตทั้งหมดที่ทำในพื้นที่เก็บข้อมูล นี่คือตัวอย่างของการคอมมิตเดียวที่ส่งคืนโดยคำสั่งนี้:
commit 43433c674e3d6c86a889fad222dae179785893cf (HEAD -> master, origin/master, origin/HEAD) Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com> Date: Tue Apr 7 13:09:58 2020 +0100 Update index.html
มาหารือเกี่ยวกับผลลัพธ์นี้ทีละขั้นตอน แต่ละรายการที่ส่งคืนโดยคำสั่ง git log ประกอบด้วย:
- แฮช Secure Hash Algorithm (SHA) สำหรับการคอมมิต ซึ่งใช้เพื่อระบุการคอมมิตแต่ละรายการในพื้นที่เก็บข้อมูลโดยไม่ซ้ำกัน ในตัวอย่างข้างต้น นี่คือ “43433c674e3d6c86a889fad222dae179785893cf”
- ผู้เขียนคอมมิต ในตัวอย่างข้างต้นของเรา นี่คือ James Gallagher ระบุอีเมลของผู้เขียนด้วย
- วันที่ที่คอมมิตถูกผลัก ในตัวอย่างข้างต้นของเรา นี่คือวันอังคารที่ 7 เมษายน
- ข้อความที่เกี่ยวข้องกับการคอมมิต ข้อความคอมมิตที่ส่งคืนด้านบนคือ “Update index.html”
ข้อมูลทั้งหมดนี้ให้ข้อมูลที่เป็นประโยชน์แก่เราเกี่ยวกับการคอมมิตในพื้นที่เก็บข้อมูลของเรา
การกรองเอาต์พุตของบันทึก git
ตามค่าเริ่มต้น บันทึก git จะส่งคืนรายการการกระทำทั้งหมดที่ทำกับพื้นที่เก็บข้อมูลโดยใช้โครงสร้างนี้ ดังที่คุณสามารถจินตนาการได้ การอ่านคำสั่งบันทึก git ของคุณอาจกลายเป็นเรื่องยากได้อย่างรวดเร็ว หากมีคอมมิตที่ต้องอ่านจำนวนมาก
บันทึก git มาพร้อมกับแฟล็กสองสามรายการที่คุณสามารถใช้เพื่อกรองบันทึกของคุณได้ เหล่านี้คือ:
กรองตามล่าสุด
หากคุณต้องการส่งคืนการคอมมิตตามจำนวนที่ระบุ คุณสามารถทำได้โดยใช้แฟล็ก -n นี่คือตัวอย่างการทำงานของแฟล็กนี้:
คำสั่งนี้จะส่งคืนรายการของการคอมมิตล่าสุดสามรายการที่ทำกับที่เก็บ
กรองตามผู้เขียนหรือผู้มอบหมาย
คุณยังสามารถกรองการคอมมิตที่ส่งคืนโดยบันทึก git โดยบุคคลที่เขียนหรือคอมมิตการเปลี่ยนแปลง สมมติว่าเราต้องการดูรายการคอมมิตที่ผลักดันโดย "John Smith" เราสามารถทำได้โดยใช้คำสั่งเหล่านี้:
git log --author="John Smith" git log --committer="John smith"
การตั้งค่าสถานะผู้เขียนจะจำกัดผลลัพธ์ไว้เฉพาะการคอมมิตที่ John Smith ได้ทำการเปลี่ยนแปลง ธงผู้ส่งจะจำกัดผลลัพธ์ไว้เฉพาะการคอมมิตที่บุคคลนั้นได้กระทำจริง
คุณจะพบว่าในกรณีส่วนใหญ่ผู้เขียนและผู้กระทำความผิดเป็นบุคคลคนเดียวกัน ในโปรเจ็กต์ขนาดใหญ่ ผู้เขียนการคอมมิตอาจไม่จำเป็นต้องเป็นผู้ส่งมันไปยังที่เก็บ นี่คือเหตุผลว่าทำไมทั้งสองแฟล็กจึงมีอยู่
กรองตามวันที่
นอกจากนี้ คุณยังสามารถกรองผลลัพธ์ของบันทึก git ตามวันที่ได้ ในการทำเช่นนั้น คุณสามารถใช้แฟล็กก่อนและหลังได้ ธงเหล่านี้ยอมรับรูปแบบวันที่ที่หลากหลาย แต่สองรูปแบบที่ใช้กันมากที่สุดคือการอ้างอิงแบบสัมพันธ์และวันที่แบบเต็ม
สมมติว่าเราต้องการดึงรายการคอมมิตหลังจากปี 2019-3-2 เราสามารถทำได้โดยใช้คำสั่งนี้:
git log --after="2019-3-2"
เราได้ระบุวันที่เพื่อกรองการคอมมิตของเรา ในทำนองเดียวกัน หากเราต้องการดึงรายการคอมมิตจากเมื่อวาน เราสามารถทำได้โดยใช้คำสั่งนี้:
git log --before="yesterday"
เราได้ระบุค่าสัมพัทธ์ (“เมื่อวาน”)
ตอนนี้ สมมติว่าเราต้องการดึงรายการข้อผูกพันที่เผยแพร่หลัง 2019-3-2 และก่อน 2019-3-19 เราสามารถทำได้โดยใช้คำสั่งนี้:
git log --after="2019-3-2" --before="2019-3-19"
กรองตามไฟล์
เมื่อคุณใช้คำสั่ง git log คุณอาจต้องการดูเฉพาะรายการคอมมิตที่ส่งผลต่อไฟล์ใดไฟล์หนึ่งเท่านั้น โดยคุณสามารถระบุไฟล์ที่คุณต้องการดูการเปลี่ยนแปลงได้
สมมติว่าเราต้องการเห็นการเปลี่ยนแปลงที่เกิดขึ้นกับไฟล์ “main.py” ในโค้ดของเรา เราสามารถทำได้โดยใช้คำสั่งต่อไปนี้:
คำสั่ง — สั่งให้คำสั่ง git log ว่าอาร์กิวเมนต์ที่เราระบุไว้นั้นเป็นพาธของไฟล์ ไม่ใช่ชื่อของสาขา
ในคำสั่งของเรา เราระบุเพียงไฟล์เดียวที่เราต้องการใช้เพื่อกรองการตอบสนองของคำสั่ง git log แต่ถ้าคุณต้องการ คุณสามารถระบุหลายไฟล์ได้
กรองตามเนื้อหา
คุณยังสามารถค้นหาคอมมิตที่ได้ลบหรือเพิ่มโค้ดบรรทัดใดบรรทัดหนึ่ง

"อาชีพกรรมเข้ามาในชีวิตของฉันเมื่อฉันต้องการมันมากที่สุดและช่วยให้ฉันเข้ากับหลักสูตรฝึกหัดได้อย่างรวดเร็ว สองเดือนหลังจากสำเร็จการศึกษา ฉันพบงานในฝันที่สอดคล้องกับค่านิยมและเป้าหมายในชีวิตของฉัน!"
Venus วิศวกรซอฟต์แวร์ที่ Rockbot
ค้นหาการแข่งขัน Bootcamp ของคุณ
สมมติว่าเราต้องการค้นหาการคอมมิตทั้งหมดที่ได้เพิ่มคำว่า “# Introduction” ลงในโค้ดของเรา เราสามารถทำได้โดยใช้คำสั่งนี้:
git log -S"# Introduction"
แฟล็ก -S ใช้เพื่อระบุการเปลี่ยนแปลงคอมมิตที่เราต้องการค้นหาในรายการคอมมิตของเรา โปรดสังเกตว่าไม่มีช่องว่างหรือเครื่องหมายเท่ากับระหว่างแฟล็ก -S นอกจากนี้ เครื่องหมายคำพูดที่เราใช้ในการระบุเนื้อหาของการคอมมิตที่เรากำลังค้นหา
กรองตามช่วง
คุณสามารถใช้พารามิเตอร์ตั้งแต่และจนถึงเพื่อส่งผ่านช่วงของการคอมมิตไปยังบันทึกคอมไพล์ ไวยากรณ์สำหรับพารามิเตอร์เหล่านี้มีดังนี้:
สมมติว่าเราต้องการดึงรายการคอมมิตที่ทำขึ้นตั้งแต่คอมมิต b72beb5 ถูกผลัก และจนกระทั่งคอมมิต b53b22d ถูกผลัก เราสามารถทำได้โดยใช้คำสั่งนี้:
คำสั่งนี้ส่งคืนรายการการคอมมิตทั้งหมดระหว่างการคอมมิต b72beb5 และ b53b22d
กรองตามข้อความ
แฟล็ก –grep ช่วยให้คุณสามารถกรองคอมมิตที่ส่งคืนโดยบันทึกคอมไพล์โดยข้อความคอมมิตที่เกี่ยวข้องกับคอมมิตเฉพาะ
ตัวอย่างเช่น สมมติว่าเราต้องการส่งคืนรายการคอมมิตทั้งหมดที่ชื่อขึ้นต้นด้วย "feat:" เราสามารถทำได้โดยใช้โค้ดนี้:
คำสั่งนี้จะส่งคืนรายการคอมมิตทั้งหมดที่มีข้อความขึ้นต้นด้วย “feat:”
การจัดรูปแบบผลลัพธ์ของบันทึก git
ในส่วนสุดท้าย เราทำงานกับเอาต์พุตทั้งหมดจากคำสั่ง git log ผลลัพธ์นี้มี SHA สำหรับการคอมมิตของเรา ผู้เขียนคอมมิต วันที่คอมมิตถูกพุช และข้อความคอมมิต
แม้ว่าข้อมูลทั้งหมดนี้มีประโยชน์ แต่บ่อยครั้งที่คุณต้องดึงข้อมูลเฉพาะเกี่ยวกับการคอมมิตเท่านั้น โชคดีที่คำสั่ง git log มาพร้อมกับแฟล็กบางตัวที่คุณสามารถใช้เพื่อจัดรูปแบบเอาต์พุตของคำสั่งได้
ส่งคืนบันทึกสรุป
ตามค่าเริ่มต้น คำสั่งบันทึก git จะส่งคืนรายการบันทึกแบบเต็มสำหรับแต่ละคอมมิตที่ทำกับที่เก็บ คุณสามารถเรียกข้อมูลรายการรหัสคอมมิตและข้อความคอมมิตที่เกี่ยวข้องได้โดยใช้แฟล็ก –oneline
ต่อไปนี้เป็นไวยากรณ์สำหรับแฟล็ก –oneline:
เมื่อรันในพื้นที่เก็บข้อมูลของเราจากเวอร์ชันก่อนหน้า คำสั่งนี้จะส่งคืน:
43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html a7d8dc2 docs: Update README.md b53b22d feat: Update website 3b16026 feat: Launch new homepage b72beb5 first commit
เราจะเห็นรหัสการคอมมิตและบรรทัดแรกของข้อความที่เกี่ยวข้องกับการคอมมิต ซึ่งอ่านได้ง่ายกว่าข้อมูลเมตาทั้งหมดที่เกี่ยวข้องกับการคอมมิตที่คำสั่ง git log จะส่งกลับ
แต่ละรายการจะปรากฏในบรรทัดเดียว เทคนิคบรรทัดเดียวของ git log นี้มีประโยชน์เพราะมันแสดงการคอมมิตโดยไม่แสดงข้อมูลมากเกินไป
การตกแต่งเอาท์พุต
ธง – ตกแต่ง ช่วยให้คุณเห็นการอ้างอิงทั้งหมด (เช่นสาขาและแท็ก) ที่ชี้ไปที่การคอมมิตเฉพาะ ต่อไปนี้เป็นไวยากรณ์สำหรับแฟล็กนี้:
คำสั่งนี้ส่งคืน:
43433c6 (HEAD -> master, origin/master, origin/HEAD) Update index.html a7d8dc2 docs: Update README.md b53b22d feat: Update website 3b16026 (tag: v1) feat: Launch new homepage b72beb5 first commit
คอมมิตที่สี่ในรายการของเราตอนนี้มีชื่อของแท็กที่ระบุแล้ว นี่เป็นเพราะว่าแฟล็ก –ตกแต่ง เปิดเผยการอ้างอิงที่เกี่ยวข้องกับแต่ละคอมมิตในประวัติคอมมิตของเรา
การส่งคืนส่วนต่าง
แฟล็ก –stat ช่วยให้คุณแสดงจำนวนบรรทัดของโค้ดที่เพิ่มและลบออกจากที่เก็บในแต่ละคอมมิต นี่คือตัวอย่างการทำงานของคำสั่ง git log –stat:
Author: James Gallagher <james@users.noreply.github.com> Date: Mon Apr 6 09:11:46 2020 +0100 feat: Update website index.html | 1 + index.js | 0 2 files changed, 1 insertion(+)
เครื่องหมายบวก (+) บ่งบอกถึงการแทรก และหากมี เครื่องหมายลบ (-) จะแสดงถึงการลบ ข้อมูลนี้ช่วยให้คุณเรียนรู้เพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงโดยรวมที่เกิดขึ้นกับพื้นที่เก็บข้อมูล
หากคุณต้องการดูการเปลี่ยนแปลงที่เกิดขึ้นกับที่เก็บ คุณสามารถใช้แฟล็ก -p สิ่งนี้จะส่งคืนความแตกต่างที่ครอบคลุมมากขึ้นซึ่งแสดงการเปลี่ยนแปลงที่เกิดขึ้นในการคอมมิต
นี่คือรายการหนึ่งที่ส่งคืนจากคำสั่ง git log -p เมื่อรันบนที่เก็บตัวอย่างของเรา:
Author: James Gallagher <37276661+jamesgallagher432@users.noreply.github.com> Date: Tue Apr 7 13:09:58 2020 +0100 Update index.html diff --git a/index.html b/index.html index f45673f..2d2701d 100644 --- a/index.html +++ b/index.html @@ -1,2 +1,3 @@ -This is a file. -Changes have been made. +<body> + <p>This is a website.</p> +</body>
ผลลัพธ์นี้แสดงให้เราเห็นทั้งคำอธิบายของการคอมมิต และรายละเอียดการเปลี่ยนแปลงแต่ละรายการที่เกิดขึ้นในคอมมิต เราจะเห็นได้เมื่อมีคนเพิ่มหรือลบเนื้อหาออกจากไฟล์ในพื้นที่เก็บข้อมูลของเรา
แม้ว่าข้อมูลนี้จะมีประโยชน์ แต่การอ่านเอาต์พุตนี้อาจกลายเป็นเรื่องยากได้อย่างรวดเร็ว หากมีคอมมิตที่จะแสดงจำนวนมาก คุณอาจต้องการใช้แฟล็กอื่นที่เราได้กล่าวถึงในบทความนี้อย่างน้อยหนึ่งรายการ ซึ่งจะช่วยให้แน่ใจว่าข้อมูลที่ส่งกลับโดยคอมมิตนี้มีทั้งความครอบคลุมและอ่านง่าย
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ Git diff ได้ในคู่มือคำสั่ง git diff ของเรา
คำสั่ง shortlog git
คำสั่ง git shortlog ให้ข้อมูลสรุปของบันทึก git ผลลัพธ์ของคำสั่ง git shortlog ถูกจัดกลุ่มตามผู้เขียน ซึ่งหมายความว่าคุณสามารถดูได้อย่างง่ายดายว่าใครทำการเปลี่ยนแปลงใดในที่เก็บ
มารันคำสั่ง git shortlog บนที่เก็บของเราจากก่อนหน้านี้:
คำสั่งของเราส่งคืน:
James Gallagher (5): first commit feat: Launch new homepage feat: Update website docs: Update README.md Update index.html
James เป็นคนเดียวที่มีส่วนร่วมใน Repository นี้ และเขาได้กระทำไปแล้วห้าครั้ง แต่หากมีผู้ร่วมให้ข้อมูลรายอื่น การมีส่วนร่วมของพวกเขาจะแสดงอยู่ที่นี่ ควบคู่ไปกับจำนวนการคอมมิตทั้งหมดที่พวกเขาได้ส่งไปยังพื้นที่เก็บข้อมูล
บทสรุป
คำสั่ง git log จะแสดงให้คุณเห็นว่ามีการเปลี่ยนแปลงอะไรบ้างในพื้นที่เก็บข้อมูล โดยใคร และเมื่อใด คุณสามารถกรองผลลัพธ์ของบันทึก git เพื่อแสดงเฉพาะข้อมูลที่คุณต้องการทราบได้
คำสั่ง git log มาพร้อมกับแฟล็กสองประเภท แฟล็กบางตัวช่วยคุณจัดรูปแบบเอาต์พุตของบันทึก แฟล็กอื่นๆ ที่สามารถช่วยคุณกรองคอมมิตที่ส่งคืนโดยคำสั่ง
บทช่วยสอนนี้กล่าวถึงวิธีใช้ git log และแฟล็กทั่วไปที่ใช้กับคำสั่ง โดยอ้างอิงถึงตัวอย่าง คำสั่ง git log เป็นเครื่องมือสำคัญในคลังแสงของคุณเมื่อทำงานกับ Git เมื่อคุณรู้วิธีใช้คำสั่งนี้อย่างมีประสิทธิภาพแล้ว คุณจะเชี่ยวชาญการตรวจสอบที่เก็บ Git!
หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ Git โปรดอ่านคู่มือวิธีเรียนรู้ Git ของเรา