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

Git Diff:A How-To Guide

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

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

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

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

คำสั่ง Git Diff

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

นี่คือไวยากรณ์สำหรับคำสั่ง git diff:

git diff

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

เราสามารถเห็นบรรทัดที่ถูกลบออกจากไฟล์ต้นฉบับของเรา เช่นเดียวกับบรรทัดใดๆ ที่เพิ่มหรือเปลี่ยนแปลงในไฟล์ต้นฉบับของเรา บ่อยครั้งที่ Git diff ถูกใช้เพื่อเปรียบเทียบสาขาในที่เก็บ Git

81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้

ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก

Git Diff ระหว่างการคอมมิต

คุณสามารถเปรียบเทียบไฟล์ระหว่างสองคอมมิต Git ได้โดยการระบุชื่อผู้อ้างอิงที่อ้างถึงคอมมิตที่คุณต้องการเปรียบเทียบ ผู้อ้างอิงอาจเป็น Commit ID หรือ HEAD ซึ่งอ้างอิงถึงสาขาปัจจุบัน

git diff <commit1> <commit2>

มาเปรียบเทียบสองคอมมิตในที่เก็บ Git ของเรากัน

ในการทำเช่นนั้น คุณต้องดึง ID ของคอมมิตที่มีไฟล์ที่คุณต้องการเปรียบเทียบก่อน คุณสามารถทำงานนี้ให้สำเร็จได้โดยใช้คำสั่ง git log –pretty=oneline ซึ่งจะส่งคืนข้อมูลสรุปโดยย่อของการคอมมิตทั้งหมดใน repo:

git log --pretty=oneline

คำสั่งนี้ส่งคืน:

5141ea9c41cdc7152408bfcab54a910f34441855 (HEAD ->; master) feat: Update README.md
749055ee99df2aa6f5adc4cbe4bfc708395f1c2e docs: Create README.md

ทีนี้ สมมติว่าเราต้องการเปรียบเทียบการคอมมิตทั้งสองนี้ เราสามารถทำได้โดยใช้คำสั่งนี้:

git diff 5141ea9c41cdc7152408bfcab54a910f34441855 749055ee99df2aa6f5adc4cbe4bfc708395f1c2e

คำสั่งด้านบนนี้จะดำเนินการต่าง ๆ ในสองคอมมิทของเรา

Git Diff ระหว่างสาขา

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

git diff <branch1>..<branch2>

สมมติว่าเราต้องการเปรียบเทียบสาขา "ต้นแบบ" กับสาขาที่เรียกว่า "dev-v0.9" ในที่เก็บของเรา เราสามารถทำได้โดยใช้คำสั่งนี้:

git diff master dev-v0.9

เมื่อดำเนินการคำสั่งนี้ จะมีการเรียกใช้ส่วนต่างระหว่างสาขา "ต้นแบบ" และ "dev-v0.9" ในฐานโค้ดของเรา

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

สมมติว่าเราต้องการเปรียบเทียบไฟล์ README.md กับสาขา "master" และ "dev-v0.9" เราสามารถทำได้โดยใช้รหัสนี้:

git diff master dev-v0.9 ./README.md

สิ่งนี้จะเปรียบเทียบไฟล์ README.md (ซึ่งอยู่ในไดเร็กทอรีปัจจุบันของเรา ซึ่งแสดงโดยไวยากรณ์ “./”) ข้ามสาขา “master” และ “dev-v0.9”

ตัวอย่างคำสั่ง Git Diff

สมมติว่าเราได้เริ่มต้นที่เก็บข้อมูลเปล่า และเราต้องการเริ่มต้นที่เก็บของเราด้วยไฟล์ README.md เราได้สร้างไฟล์ README.md ในที่เก็บของเราซึ่งมีประโยคต่อไปนี้:

นี่คือตัวอย่างของคุณลักษณะ Git diff

เตรียมไฟล์และดำเนินการ

เราจะสร้างการคอมมิตกับไฟล์นี้โดยใช้คำสั่ง git commit:

git commit

ซึ่งช่วยให้เราสามารถบันทึกการเปลี่ยนแปลงที่เราทำกับที่เก็บของเรา คำสั่ง git ส่งคืน:

[master (root-commit) 749055e] docs: Create README.md
1 file changed, 1 insertion(+)
create mode 100644 README.md

หากเรารันคำสั่ง git diff ในขั้นตอนนี้ จะไม่มีอะไรเกิดขึ้น เนื่องจากพื้นที่เก็บข้อมูลของเราได้รับการเตรียมใช้งานแล้ว และไม่มีการเปลี่ยนแปลงระหว่างไฟล์ใดๆ ในที่เก็บของเรา ตอนนี้เรามีที่เก็บพื้นฐานแล้ว เราสามารถเปลี่ยนเนื้อหาของไฟล์ใน repo ของเราได้ ซึ่งจะทำให้เราเห็นการทำงานของคำสั่ง git diff

สมมติว่าเราต้องการเพิ่มประโยค "เราเพิ่งเพิ่มบรรทัดนี้ในไฟล์ของเรา" ไปยังไฟล์ README.md เราสามารถทำได้โดยใช้คำสั่งนี้:

echo "We just added this line to our file." >> README.md

คำสั่งดังกล่าวจะเพิ่มประโยคของเราลงในไฟล์ README.md

ซึ่งหมายความว่าขณะนี้มีความแตกต่างระหว่างไฟล์ README.md เริ่มต้นและไฟล์ README.md ปัจจุบันในที่เก็บของเรา

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

เรียกใช้ Git Diff ระหว่างการคอมมิต

เมื่อเรารันคำสั่ง การตอบสนองต่อไปนี้จะถูกส่งกลับ:

diff --git a/README.md b/README.md
index f808522..f08e544 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,2 @@
+We have just added this line to our file.

นี่คือตัวอย่างของคุณลักษณะ Git diff

นี่เป็นผลลัพธ์ทั่วไปจากคำสั่ง git diff ผลลัพธ์จะแสดงสิ่งที่เพิ่มหรือลบในไฟล์ของเราในรูปแบบส่วนต่างแบบรวม

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

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

ในตัวอย่างนี้ เราได้เปลี่ยนเฉพาะไฟล์ README.md ดังนั้นระบบจะแสดงเฉพาะการเปลี่ยนแปลงเหล่านั้นเท่านั้น แต่ถ้าเรากำลังทำงานกับ repo ที่ใหญ่กว่า เราอาจต้องการเปรียบเทียบเฉพาะการเปลี่ยนแปลงในไฟล์เดียว ในการทำเช่นนั้น เราสามารถใช้คำสั่งนี้:

git diff README.md

คำสั่งนี้ช่วยให้เราสามารถเปรียบเทียบไฟล์ README.md เวอร์ชันปัจจุบันกับเวอร์ชันล่าสุดที่ผูกมัดกับที่เก็บของเรา

รายละเอียด Git Diff

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

ใส่ไฟล์

องค์ประกอบแรกของส่วนต่างของเราคือ ไฟล์อินพุต . ส่วนต่างส่วนนี้บอกเราว่าไฟล์ใดจะถูกเปรียบเทียบในส่วนต่าง

เรากำลังเปรียบเทียบไฟล์ README.md ในโค้ดเวอร์ชันปัจจุบันกับไฟล์ README.md ในโค้ดเวอร์ชันล่าสุด ซึ่งระบุไว้ในบรรทัดแรกของรหัสของเรา:

diff --git a/README.md b/README.md

ข้อมูลเมตา

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

ข้อมูลนี้ไม่ค่อยได้ใช้ในกรณีส่วนใหญ่ของคำสั่ง diff ในตัวอย่างข้างต้น ข้อมูลเมตาจะมีลักษณะดังนี้:

index f808522..f08e544 100644

เปลี่ยนเครื่องหมาย

ส่วนถัดไปของเอาต์พุต Git diff คือ เครื่องหมายการเปลี่ยนแปลง . เครื่องหมายรูปแบบไฟล์เหล่านี้บอกเราว่ามีการเปลี่ยนแปลงประเภทใดบ้างในไฟล์ของเรา เครื่องหมายการเปลี่ยนแปลงสำหรับตัวอย่างข้างต้นของเราคือ:

--- a/README.md
+++ b/README.md

เครื่องหมายเหล่านี้บอกเราว่ามีการเปลี่ยนแปลงจาก a/README.md (แสดงด้วยเครื่องหมายลบ) ซึ่งสะท้อนให้เห็นใน b/README.md (แสดงด้วยเครื่องหมายบวก)

การเปลี่ยนแปลงโค้ด

สุดท้าย ส่วนต่างของเราจะแสดงรายการการเปลี่ยนแปลงที่ทำกับโค้ดของเรา . ต่างจากการเปรียบเทียบไฟล์แบบเต็ม diffs แสดงเฉพาะส่วนของไฟล์ที่มีการเปลี่ยนแปลงเท่านั้น ในตัวอย่างของเรา เราได้เพิ่มหนึ่งบรรทัดในไฟล์ของเรา ซึ่งส่งคืนผลลัพธ์ต่อไปนี้:

@@ -1 +1,2 @@
 This is an example of the Git diff feature.
+We have just added this line to our file.

บรรทัดแรกเป็นบทสรุปของการเปลี่ยนแปลงที่ทำกับไฟล์ของเรา สิ่งนี้บอกเราว่าเราได้เพิ่มโค้ดหนึ่งบรรทัดในไฟล์ของเรา (+1) โดยเริ่มจากบรรทัดที่สอง (2)

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

บทสรุป

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

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

สำหรับแหล่งข้อมูลการเรียนรู้เพิ่มเติมเกี่ยวกับ Git โปรดดูคู่มือ How to Learn Git