วิธีการทำให้ git-diff และ git log ละเว้นไฟล์ใหม่และไฟล์ที่ถูกลบ?


155

บางครั้งมีไฟล์ที่เปลี่ยนแปลงสองสามไฟล์พร้อมกับไฟล์ใหม่ลบและ / หรือเปลี่ยนชื่อ เมื่อทำgit diffหรือgit-logฉันต้องการละเว้นพวกเขาดังนั้นฉันสามารถเห็นการแก้ไขได้ดีขึ้น

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

คำตอบ:


217

--diff-filterตัวเลือกที่ทำงานร่วมกับทั้งสองdiffและเข้าสู่ระบบ

ฉันใช้งาน--diff-filter=Mจำนวนมากซึ่ง จำกัด เอาต์พุตต่างกันสำหรับการแก้ไขเนื้อหาเท่านั้น

ในการตรวจสอบการเปลี่ยนชื่อและสำเนาและใช้เหล่านี้ในการส่งออกต่างที่คุณสามารถใช้-Mและ-Cตามลำดับพร้อมRและตัวเลือกในการC--diff-filter


3
เมื่อใช้กับgit logสิ่งนี้จะทำให้ละเว้นการกระทำทั้งหมดที่เพิ่มและ / หรือลบไฟล์เท่านั้น
qqx

7
มีวิธียกเว้นข้อมูลประเภทใดประเภทหนึ่งหรือไม่? สิ่งที่ต้องการ--diff-filter=!D
Kamil Dziedzic

24
@ Kamil ใช่ใช่มี อ้างจากเอกสารประกอบ:Also, these upper-case letters can be downcased to exclude. E.g. --diff-filter=ad excludes added and deleted paths.
LambdaCruiser

62
  • เอกสารทางการ:
--diff-filter=[(A|C|D|M|R|T|U|X|B)…​[*]]

เลือกเฉพาะไฟล์ที่เพิ่ม (A), คัดลอก (C), ลบ (D), แก้ไข (M), เปลี่ยนชื่อ (R), มีประเภทไฟล์ (เช่นไฟล์ปกติ, symlink, submodule, …) (T), เป็น Unmerged (U), ไม่ทราบ (X) หรือมีการจับคู่ Broken (B) สามารถใช้ชุดอักขระตัวกรอง (รวมถึงไม่มี) ได้

เมื่อเพิ่ม * (All-or-none) ลงในการรวมกันพา ธ ทั้งหมดจะถูกเลือกหากมีไฟล์ใด ๆ ที่ตรงกับเกณฑ์อื่นในการเปรียบเทียบ หากไม่มีไฟล์ที่ตรงกับเกณฑ์อื่น ๆ จะไม่มีการเลือกอะไรเลย

นอกจากนี้ตัวอักษรตัวพิมพ์ใหญ่เหล่านี้สามารถลดระดับลงเพื่อยกเว้น เช่น --diff-filter = ad ไม่รวมเส้นทางที่เพิ่มและลบ

ตัวอย่าง: แสดงเฉพาะไฟล์ที่ถูกแก้ไขเปลี่ยนแปลงเพิ่มไม่รวมไฟล์ที่ถูกลบ:

git diff --diff-filter=ACM

2
หมายเหตุที่ดีเกี่ยวกับการใช้ตัวเลือกตัวอักษรพิมพ์เล็กเพื่อยกเว้นเส้นทางและตัวเลือกพิมพ์ใหญ่เพื่อรวมเส้นทาง
stuyam

-3

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

ฉันจะทิ้งคำตอบนี้ไว้ที่นี่เพราะมันอาจให้แนวคิดสำหรับสิ่งที่ไม่ได้สร้างไว้ในคอมไพล์


git diff/dev/nullแสดงไฟล์ใหม่และถูกลบโดยการเปรียบเทียบพวกเขาไป ไม่ควรยากเกินไปที่จะเขียนบางสิ่ง (ฉันจะใช้ Perl เอง) ที่ค้นหา/dev/nullและกรองบรรทัดต่อไปนี้จนถึงส่วนต่างถัดไป git diff ... | the-filterแล้วก็

ไฟล์ที่ถูกเปลี่ยนชื่อเป็นเรื่องอื่น ฉันยังไม่มีคำตอบที่ดีสำหรับสิ่งนั้น


ไม่เป็นไร แต่วิธีนี้ฉันจะสูญเสียความเป็นไปได้ที่จะใช้เพจเจอร์ (น้อยกว่า) เฉพาะในกรณีที่จำเป็นเท่านั้นใช่ไหม
maaartinus

@ maaartinus: ฉันก็คิดเช่นนั้น ฉันไม่ได้คิดอย่างนั้น (ส่วนตัวผมตั้งเพจเจอร์คอมไพล์ของฉันไป "แมว" และการใช้... | lessอย่างชัดเจน.) คุณอาจมองless's -Eหรือ-Fตัวเลือก (แม้ในระบบของฉันมันไม่ได้ให้ฉันดูการส่งออก)
Keith Thompson

ตกลงนั่นเป็นเรื่องปกติ แต่ดูคำตอบอื่น
maaartinus
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.