เหตุใด "git log -‌- foo" จึงไม่สามารถใช้กับไฟล์ที่ถูกลบได้


89

ที่เก็บของฉันมีการเปลี่ยนแปลงเช่น:

  1. ... การกระทำบางอย่างที่ไม่เกี่ยวข้อง ...
  2. ยอมรับไฟล์ใหม่ที่fooมีเนื้อหา 100 บรรทัด
  3. ... แทรกแซงกระทำบางอย่างที่สัมผัสfoo...
  4. แทรกเนื้อหาfooที่ด้านบนของไฟล์ที่มีอยู่barและgit rm fooในคอมมิตเดียวกัน
  5. ... ยิ่งไม่เกี่ยวข้องกับการกระทำ ...

fooตอนนี้ผมต้องการที่จะเห็นบันทึกการลบไฟล์ ทุกสิ่งที่ฉันอ่านรวมถึง SO บอกว่าฉันควรจะทำได้git log -- fooแต่คำสั่งนั้นไม่มีผลลัพธ์

หากฉันพบการกระทำที่รวมถึงการลบfooฉันทำได้git log 1234abcd -- fooและเห็นบันทึกของมันดังนั้นฉันคิดว่าเส้นทางของฉันไปfooไม่ใช่ปัญหา นอกจากนี้ทราบว่าgit merge-base HEAD 1234abcdผลดังนั้นฉันคิดว่าควรพิสูจน์กระทำสามารถเข้าถึงได้จาก1234abcd[...] HEADโปรดทราบว่าไม่มีไฟล์fooในโครงสร้างการทำงานของฉัน (ชัดเจนเนื่องจากถูกลบไปแล้ว) การใช้ Git 1.7.1.1 บน OS X

ทำไมไม่ได้git log -- fooผลสำหรับฉันและฉันจะแก้ไขได้อย่างไร ขอบคุณ!


5
คุณลองgit log --follow -- fooหรือยังgit log --follow -M -- foo? (เพื่อบังคับให้ตรวจจับการเปลี่ยนชื่อ)
VonC

1
อึฉันไม่ได้ลอง--follow- แต่historyฉันอ่านฉันเห็นว่าฉันมี cd'ed ที่อื่นเมื่อฉันลองทำให้เส้นทางไม่ถูกต้อง git log --follow -- fooได้ผลเมื่อฉันพยายามจากจุดเริ่มต้นที่ถูกต้อง ผมคิดว่า Git พิจารณากลิ้งfooเข้าbarเป็นชนิดของการเปลี่ยนชื่อหรือไม่? ไม่ว่าในกรณีใด ๆ ขอขอบคุณ! เรายินดีให้เครดิตสิ่งนี้หากคุณจะโพสต์ใหม่เป็นคำตอบ
user385804

1
น่ารำคาญที่--เปลี่ยนเป็นในชื่อคำถาม ...
Cascabel

คำตอบ:


118

คุณต้องการใช้--followอ็อพชันบนgit logซึ่งอธิบายไว้ใน man page เป็น:

Continue listing the history of a file beyond renames.

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

git log --follow -- foo

อัปเดต:

ตอนนี้ Git 2.9+ ได้เปิดใช้งานสิ่งนี้โดยค่าเริ่มต้นสำหรับทุกคนgit diffและgit logคำสั่ง:

ผู้ใช้ปลายทางที่เผชิญกับคำสั่งระดับ Porcelain ในตระกูล "git diff" และ "git log" โดยค่าเริ่มต้นจะเปิดใช้งานการตรวจจับการเปลี่ยนชื่อ คุณยังคงสามารถใช้ตัวแปรการกำหนดค่า "diff.renames" เพื่อปิดใช้งานสิ่งนี้

ขอบคุณ x-yuri สำหรับหัวเรื่อง!


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