git - ค้นหาการกระทำที่เพิ่มไฟล์


208

สมมติว่าฉันมีไฟล์foo.jsที่ถูกคอมมิทเมื่อไม่นานมานี้ ฉันต้องการค้นหาการกระทำที่ไฟล์นี้ถูกเพิ่มครั้งแรก

หลังจากอ่านคำตอบและการซ่อมแซมของฉันแล้วมันก็ใช้ได้กับฉัน

git log --follow --diff-filter=A --find-renames=40% foo.js

คำตอบ:


317

นี่เป็นวิธีที่ง่ายกว่า "pure Git" โดยไม่ต้องมีขั้นตอน:

git log --diff-filter=A -- foo.js

ตรวจสอบเอกสารประกอบ คุณสามารถทำสิ่งเดียวกันกับ Deleted, Modified และอื่น ๆ

https://git-scm.com/docs/git-log#Documentation/git-log.txt---diff-filterACDMRTUXB82308203

ฉันมีนามแฝงที่มีประโยชน์สำหรับสิ่งนี้เพราะฉันลืมมันเสมอ:

git config --global alias.whatadded 'log --diff-filter=A'

ทำให้ง่ายเหมือน:

git whatadded -- foo.js

ซับด้านล่างหนึ่งจะค้นหาซ้ำในไดเรกทอรีย่อยของ$PWDfor foo.jsโดยไม่ต้องระบุและพา ธ สัมบูรณ์หรือพา ธ สัมพัทธ์ไปยังไฟล์และไฟล์นั้นจะต้องอยู่ในไดเรกทอรีเดียวกันกับ$PWD

git log --diff-filter=A -- **foo.js

27
+1! อย่างไรก็ตามไฟล์ของฉันอยู่ในโฟลเดอร์ย่อยดังนั้นทำงานได้เฉพาะหลังจากที่ฉันเพิ่มเครื่องหมายดอกจันไว้ด้านหน้าgit log --diff-filter=A -- *subfolder/foo.js
Geo

4
วิธีนี้ทำงานกับไฟล์ที่ผสานจากสาขาอื่น ๆ แต่ไม่จำเป็นต้องเพิ่มในสาขาที่ถูกผสานโดยผู้ใช้ที่ทำการผสาน
g33kz0r

ลิงก์เอกสารด้านบนไม่ได้ข้ามไปที่ข้อมูลการตั้งค่าสถานะ อาจจะเปลี่ยนไปตั้งแต่โพสต์ git-scm.com/docs/git-log#Documentation/…
webbower

1
ใช่พวกเขาเปลี่ยนโครงสร้างจุดยึดในเอกสาร อัปเดตขอบคุณ!
stelterd

@geo ฉันคิดว่าฉันได้รับสิ่งที่คุณพูด แต่ไม่จริง แต่ฉันมีกรณีการใช้งานที่คล้ายกันซึ่งโดยทั่วไปฉันอยู่ในรากของโครงการของไดเรกทอรี git และออกคำสั่งจากที่นั่นและใช้หนึ่งซับที่จัดมาgit log --diff-filter=A -- foo.jsไม่ได้พิมพ์ กระทำ ID / แฮชไปที่ STDOUT ในเทอร์มินัลของฉันฉันต้องจัดเตรียมพา ธ สัมพัทธ์ไปยังไฟล์จากราก git repo เพื่อให้ได้ผลลัพธ์ที่ต้องการ
ipatch


1

ต่อไปนี้อาจไม่เป็นที่สนใจของคุณ แต่ฉันคิดว่ามันจะช่วยคุณในอนาคตและเป็นส่วนหนึ่งของการแก้ไขข้อบกพร่องของระบบนิเวศใน Git:

คุณสามารถใช้git-blameเพื่อแสดงสิ่งที่แก้ไขและผู้เขียนแก้ไขล่าสุดแต่ละบรรทัดของไฟล์โดยเฉพาะคำอธิบายประกอบไฟล์ เยี่ยมชมhttps://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git

ตัวอย่างเช่น,

git blame -L 174,190  xx.py

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

ตามที่หนังสือ Pro-Git กล่าวว่าหากคุณติดตามข้อผิดพลาดในรหัสของคุณและต้องการทราบว่าเมื่อใดที่มีการเปิดตัวและสาเหตุที่คำอธิบายประกอบไฟล์มักเป็นเครื่องมือที่ดีที่สุดของคุณ มันแสดงให้คุณเห็นว่าอะไรคือความมุ่งมั่นสุดท้ายที่จะแก้ไขแต่ละบรรทัดของไฟล์ใด ๆ ดังนั้นตัวอย่างนี้ที่ฉันแสดงให้เห็นใช้ตัวเลือก -L เพื่อ จำกัด เอาต์พุตไปที่บรรทัด 174 ถึง 190 และสิ่งสุดท้ายคือเพียงไฟล์เป้าหมายที่คุณต้องการตรวจสอบ xx.py) ในกรณีนี้เป็นไฟล์ python @rossmcm
Reidel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.