เมื่อใช้ Git คุณจะพบความแตกต่างระหว่างรุ่นปัจจุบันและรุ่นล่าสุดได้อย่างไร
git diff last version:HEAD
เมื่อใช้ Git คุณจะพบความแตกต่างระหว่างรุ่นปัจจุบันและรุ่นล่าสุดได้อย่างไร
git diff last version:HEAD
คำตอบ:
ฉันไม่เข้าใจความหมายของ "เวอร์ชันล่าสุด" จริงๆ
เนื่องจากความมุ่งมั่นก่อนหน้านี้สามารถเข้าถึงได้ด้วย HEAD ^ ฉันคิดว่าคุณกำลังมองหาบางสิ่งเช่น:
git diff HEAD^ HEAD
ในฐานะของ Git 1.8.5 @เป็นชื่อแทนHEADดังนั้นคุณสามารถใช้:
git diff @~..@
ต่อไปนี้จะใช้งานได้:
git show
หากคุณต้องการทราบความแตกต่างระหว่างหัวกับข้อผูกพันใด ๆ ที่คุณสามารถใช้ได้:
git diff commit_id HEAD
และสิ่งนี้จะเรียกใช้เครื่องมือแสดงภาพของคุณ (หากกำหนดค่า)
git difftool HEAD^ HEAD
เนื่องจากการเปรียบเทียบกับ HEAD เป็นค่าเริ่มต้นคุณสามารถละเว้นได้ (ดังที่อธิบายไว้โดยOrient ):
git diff @^
git diff HEAD^
git diff commit_id
~^@ HEADและเนื่องจาก~และ^จะเหมือนกันเมื่อมีเพียงแค่การยอมรับกลับฉันพบว่าgit diff @~..@พิมพ์ได้ง่ายกว่ามาก
git showยังคงง่ายกว่าเนื่องจาก@~..@เป็นสิ่งเริ่มต้นที่จะแสดง
git showเพียงพิมพ์ข้อความคอมมิชชันมันจะไม่ส่งออกส่วนต่างของการเปลี่ยนแปลงเฉพาะอย่างน้อยใน Git 2.5.4 (Apple Git-61) ดังนั้นจริง ๆ แล้วมันจะไม่ใช่คำตอบสำหรับคำถามของ OP
git showคือถ้าHEADการรวมการคอมมิชชันคุณจะไม่ได้รับสิ่งที่คุณคาดหวังเนื่องจากการรวมการคอมมิชชันเองอาจไม่มีการเปลี่ยนแปลงใด ๆ git diff HEAD^ HEADจะแสดงการเปลี่ยนแปลงที่แท้จริงระหว่างเวอร์ชัน
สมมติว่า "รุ่นปัจจุบัน" เป็นไดเรกทอรีที่ใช้งานได้ (การดัดแปลงแบบไม่มีข้อผูกมัด) และ "รุ่นสุดท้าย" คือHEAD(การแก้ไขที่กระทำครั้งสุดท้ายสำหรับสาขาปัจจุบัน) เพียงแค่ทำ
git diff HEAD
Cerranสินเชื่อเพื่อการดังต่อไปนี้ไปให้กับผู้ใช้
และถ้าคุณมักจะข้ามพื้นที่การแสดงละครด้วยเมื่อคุณกระทำแล้วคุณสามารถเพียงแค่ใช้-agit diff
สรุป
git diff แสดงการเปลี่ยนแปลงแบบไม่มีการกำหนดgit diff --cached แสดงการเปลี่ยนแปลงตามฉากgit diff HEAD แสดงการเปลี่ยนแปลงทั้งหมด (ทั้งฉากและไม่มีฉาก)ที่มา: git-diff (1) หน้าคู่มือ - Cerran
-a git diff<1> git diffแสดงunstagedเปลี่ยนแปลง <2> git diff --cachedแสดงการเปลี่ยนแปลงแบบฉาก <3> git diff HEADแสดงการเปลี่ยนแปลงทั้งหมด (ทั้งฉากและไม่จัดฉาก) ที่มา: git-diff (1) หน้าคู่มือ
ตามที่ระบุไว้ในความคิดเห็นโดยamalloyหากโดย "รุ่นปัจจุบันและรุ่นสุดท้าย" คุณหมายถึงการกระทำครั้งสุดท้ายและการกระทำก่อนหน้านั้นคุณสามารถใช้
git show
git show HEAD~1เพื่อแสดงการกระทำสุดท้าย แต่อย่างใดอย่างหนึ่งและgit show HEAD~2อื่น ๆ สำหรับการกระทำที่เก่ากว่า git show HEAD~2 my_fileแสดงเพียงไฟล์เดียวผ่าน
ความแตกต่างระหว่างการมอบหมายสุดท้าย แต่อย่างใดอย่างหนึ่งกับการกระทำครั้งสุดท้าย (รวมถึงสถานะปัจจุบันหากมี):
git diff HEAD~
หรือแม้กระทั่ง (พิมพ์ง่ายกว่า)
git diff @~
ที่@เป็น synonim สำหรับHEADสาขาในปัจจุบันและ~หมายถึง "ให้ฉันแม่ของการแก้ไขดังกล่าว"
git diff HEAD^(มากกว่าHEAD~รูปแบบที่เทียบเท่า) มันง่ายกว่าที่จะจำสำหรับ "git เก่า" อย่างตัวเอง ;-)
~และความ@หมาย
diff HEAD^ HEADควรใช้ไวยากรณ์ที่สั้นกว่าgit diff @^!นี้ ดูgit-scm.com/docs/gitrevisionsสำหรับr1^!
คุณสามารถทำได้ด้วยวิธีนี้เช่นกัน:
เปรียบเทียบกับการกระทำก่อนหน้า
git diff --name-status HEAD~1..HEAD
เปรียบเทียบกับการกระทำทั้งสองปัจจุบันและก่อนหน้า
git diff --name-status HEAD~2..HEAD
ใช้cachedแฟล็กหากคุณเพิ่ม แต่ยังไม่ได้ทำ:
git diff --cached --color
เร็วและง่ายโดยสมมติว่าคุณอยู่ในตำแหน่งหลัก:
git diff (checkout_id):file.txt file.txt
ตัวอย่าง:
git diff asdfioei91819280din198:file.txt file.txt
ประการแรกใช้ " git log" เพื่อแสดงรายการบันทึกสำหรับที่เก็บ
ตอนนี้เลือกสองกระทำ ID ที่เกี่ยวข้องกับทั้งสองกระทำ คุณต้องการเห็นความแตกต่าง ( ตัวอย่าง - การกระทำที่ได้รับความนิยมสูงสุดและการกระทำที่เก่ากว่า (ตามที่คุณคาดหวังของรุ่นปัจจุบันและรุ่นเก่า) )
ถัดไปใช้:
git diff <commit_id1> <commit_id2>
หรือ
git difftool <commit_id1> <commit_id2>
หาก HEAD ระดับสูงชี้ไปที่ HEAD คุณสามารถทำสิ่งนี้ได้:
commit1 -> HEAD
commit2 -> HEAD~1
commit3 -> HEAD~2
ความแตกต่างระหว่างการคอมมิตครั้งแรกและครั้งที่สอง:
git diff HEAD~1 HEAD
ความแตกต่างระหว่างการคอมมิตครั้งแรกและการคอมมิชชันที่สาม:
git diff HEAD~2 HEAD
ความแตกต่างระหว่างการส่งมอบครั้งที่สองและครั้งที่สาม:
git diff HEAD~2 HEAD~1
และอื่น ๆ ...
สิ่งนี้จะทำงานกับแท็ก (ลบ 'uniq' ด้านล่างและส่วนอื่น ๆ หากคุณต้องการดูการเปลี่ยนแปลงทั้งหมด):
git diff v1.58 HEAD
ด้านล่างเหมือนกันและอาจเป็นประโยชน์สำหรับการรวมอย่างต่อเนื่อง (CI) สำหรับไมโครไซต์ในที่เก็บเสาหิน:
git diff v1.58 HEAD --name-only | sort -u | awk 'BEGIN {FS="/"} {print $1}' | uniq
<Folder Name>
(เครดิต - https://dzone.com/articles/build-test-and-deploy-apps-independently-from-a-mo )