สำหรับการเปลี่ยนแปลงที่ซ่อนอยู่ในการรวมการกระทำ
การรวมกระทำกระทำโดยอัตโนมัติซ่อนการเปลี่ยนแปลงของพวกเขาจากเอาท์พุท Git ทั้งpickaxeและreverse-blameไม่พบการเปลี่ยนแปลง ดังนั้นบรรทัดที่ฉันต้องการได้รับการเพิ่มและลบออกในภายหลังและฉันต้องการที่จะหาผสานที่ลบมัน git log -p -- path/fileประวัติไฟล์แสดงให้เห็นว่ามันถูกเพิ่มเข้ามาเท่านั้น นี่คือวิธีที่ดีที่สุดที่ฉันค้นพบ:
git log -p -U9999 -- path/file
ค้นหาการเปลี่ยนแปลงจากนั้นค้นหาย้อนหลังสำหรับ "^ กระทำ" - "^ กระทำครั้งแรก" คือการกระทำที่ไฟล์สุดท้ายมีบรรทัดนั้น "^ commit" ที่สองคือหลังจากที่มันหายไป การมอบหมายครั้งที่สองอาจเป็นการลบออก -U9999จะหมายถึงการแสดงเนื้อหาไฟล์ทั้งหมด (หลังในแต่ละครั้งที่ไฟล์นั้นถูกเปลี่ยนแปลง) สมมติว่าไฟล์ของคุณที่มีอยู่ทั้งหมดสูงสุด 9999 เส้น
พบผสานเกี่ยวข้องใด ๆ ผ่านทางบังคับเดรัจฉาน (diff แต่ละผสานไปได้กระทำกับผู้ปกครองครั้งแรกทำงานกับตันกระทำ)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(ฉันพยายาม จำกัด ตัวกรองการแก้ไขเพิ่มเติม แต่ฉันพบปัญหาและไม่แนะนำสิ่งนี้การเปลี่ยนแปลงการเพิ่ม / การลบที่ฉันมองหาอยู่ในสาขาต่าง ๆ ซึ่งถูกรวมเข้าด้วยกันในเวลาที่ต่างกันและ A ... B ไม่รวม เมื่อการเปลี่ยนแปลงได้รวมเข้ากับการฉีดจริง)
แสดงแผนผัง Git ด้วยการกระทำทั้งสอง (และลบประวัติ Git ที่ซับซ้อนจำนวนมาก):
git log --graph --oneline A B ^$(git merge-base A B)
(A คือการคอมมิชชันแรกข้างบน B คือการคอมมิทที่สองด้านบน)
แสดงประวัติของ A และประวัติของ B ลบประวัติของทั้ง A และ B
รุ่นอื่น (ดูเหมือนว่าจะแสดงเส้นทางเป็นเส้นตรงมากกว่าต้นไม้ประวัติ Git ปกติ - แต่ฉันชอบต้นไม้ประวัติศาสตร์ Git ปกติ):
git log --graph --oneline A...B
สามไม่ใช่สองจุด - สามจุดหมายถึง "r1 r2 - not $ (git merge-base - all r1 r2) เป็นชุดของการคอมมิทที่เข้าถึงได้จาก r1 (ด้านซ้าย) หรือ r2 (ขวา) ด้านข้าง) แต่ไม่ใช่จากทั้งคู่ " - แหล่งที่มา: "man gitrevisions"
git log -S<string> /path/to/fileต้องการ-cหรือ-ccแสดงการลบในระหว่างการรวม (ข้อขัดแย้ง)