คำสั่ง 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