มีวิธีแสดงรายการการกระทำทั้งหมดที่เปลี่ยนแปลงไฟล์เฉพาะหรือไม่?
มีวิธีแสดงรายการการกระทำทั้งหมดที่เปลี่ยนแปลงไฟล์เฉพาะหรือไม่?
คำตอบ:
การ--follow
ทำงานสำหรับไฟล์เฉพาะ
git log --follow -- filename
ความแตกต่างกับโซลูชั่นอื่น ๆ ที่ได้รับ
โปรดทราบว่าการแก้ปัญหาอื่น ๆ รวมถึงgit log path
(ไม่มี--follow
) วิธีการนั้นมีประโยชน์ถ้าคุณต้องการติดตามเช่นการเปลี่ยนแปลงในไดเรกทอรีแต่จะสะดุดเมื่อมีการเปลี่ยนชื่อไฟล์ (ใช้เช่นนั้น--follow filename
)
--follow
บัญชี+1 สำหรับการเปลี่ยนชื่อดังนั้นสิ่งนี้จึงแข็งแกร่งกว่าgit log -- path
--follow
ยอมรับเส้นทางซึ่งอาจเป็นไฟล์ แต่ยังเป็นไดเรกทอรี ในกรณีหลังมันจะทำงานซ้ำและรายงานการเปลี่ยนแปลงไฟล์ทั้งหมดด้านล่างจุดนั้น (พฤติกรรมนี้ไม่ได้บันทึกไว้ใน manpage และอาจไม่ถาวร)
git log filename?
git log filename
ไม่ได้ติดตามการเปลี่ยนชื่อไฟล์นั่นคือจะแสดงข้อผูกพันทั้งหมดที่เกี่ยวข้องกับชื่อไฟล์นั้น(ไม่ใช่ไฟล์จริง) ถ้าคุณสร้างไฟล์X
และY
เปลี่ยนทั้งสองแล้วลบY
และเปลี่ยนชื่อX
ไปY
แล้วยังมีการเปลี่ยนแปลงมันและคุณเรียกgit log Y
คุณจะได้รับข้อความสำหรับทั้งเก่า Y
และใหม่อย่างใดอย่างหนึ่ง และตรงข้ามกับ--follow
ที่คุณจะได้รับการกระทำเกี่ยวกับไฟล์ที่ว่าเมื่อมันเป็นชื่อX
และY
เมื่อมันถูกตั้งชื่อว่า
git log path
ควรทำสิ่งที่คุณต้องการ จากgit log
คน :
[--] <path>…
Show only commits that affect any of the specified paths. To prevent confusion with
options and branch names, paths may need to be prefixed with "-- " to separate them
from options or refnames.
ฉันได้รับการตรวจสอบอย่างใกล้ชิดและคำตอบเหล่านี้ดูเหมือนจะไม่แสดงให้ฉันเห็นความมุ่งมั่นทั้งหมดในทุกสาขา
นี่คือสิ่งที่ฉันได้มาด้วยโดย messing รอบกับตัวเลือกมุมมองแก้ไข gitk สิ่งนี้แสดงให้ฉันเห็นถึงความมุ่งมั่นทั้งหมดของไฟล์โดยไม่คำนึงถึงสาขา, โลคัล, reflog และระยะไกล
gitk --all --first-parent --remotes --reflog --author-date-order -- filename
มันยังทำงานร่วมกับgit log
:
git log --all --first-parent --remotes --reflog --author-date-order -- filename
--reflog
รวมถึงการกระทำที่ถูกลด / แก้ไขหรือยกเลิกเป็นอย่างอื่น อาจจะเห็นได้ชัด แต่ฉันพยายามใช้สิ่งนี้ด้วยgit log
และพยายามคิดว่าทำไมฉันถึงเห็นคอมมิชชันที่ซ้ำกัน!
ใช้คำสั่งด้านล่างเพื่อรับคอมมิทสำหรับไฟล์เฉพาะ:
git log -p filename
git log -p mybranch -- filename
หรือใช้git log --all -- filename
เพื่อค้นหาในทุกสาขา
มันควรจะง่ายเหมือนgit log <somepath>
; ตรวจสอบ manpage ( git-log(1)
)
ส่วนตัวฉันชอบที่จะใช้git log --stat <path>
เพื่อให้ฉันสามารถเห็นผลกระทบของการกระทำแต่ละครั้งในไฟล์
-p
คุณต้องการเห็นความแตกต่างเต็มรูปแบบไม่ใช่แค่ว่ามันมีการแก้ไขจำนวนบรรทัด
git show
มุ่งมั่นเฉพาะที่ดูเหมือนว่าพวกเขามีความสำคัญ
อีกทางเลือกหนึ่ง (ตั้งแต่ Git 1.8.4) ก็เป็นไปได้ที่จะได้รับการกระทำทั้งหมดที่มีการเปลี่ยนแปลงส่วนหนึ่งของไฟล์ คุณสามารถรับสิ่งนี้ได้โดยผ่านบรรทัดเริ่มต้นและหมายเลขบรรทัดสุดท้าย
ผลลัพธ์ที่ส่งคืนจะเป็นรายการข้อผูกพันที่แก้ไขส่วนนี้โดยเฉพาะ คำสั่งมีลักษณะดังนี้:
git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>
ที่upperLimit
เป็นstart_line_number
และlowerLimit
เป็นending_line_number
ข้อมูลเพิ่มเติม - https://www.techpurohit.com/list-some-useful-git-commands
ตามที่ jackrabb1t ชี้ให้เห็น--follow
จะมีประสิทธิภาพมากกว่าเนื่องจากยังคงแสดงรายการประวัติที่นอกเหนือจากการเปลี่ยนชื่อ / การย้าย ดังนั้นหากคุณกำลังมองหาไฟล์ที่ไม่ได้อยู่ในเส้นทางเดียวกันหรือไฟล์ที่ถูกเปลี่ยนชื่อตลอดคอมมิชชันต่าง ๆ - ผู้ติดตามจะติดตามมัน
นี่อาจเป็นตัวเลือกที่ดีกว่าถ้าคุณต้องการเห็นภาพการเปลี่ยนแปลงชื่อ / เส้นทาง:
git log --follow --name-status -- <path>
แต่ถ้าคุณต้องการรายการขนาดกะทัดรัดยิ่งขึ้นเฉพาะสิ่งที่สำคัญ:
git log --follow --name-status --format='%H' -- <path>
หรือแม้กระทั่ง
git log --follow --name-only --format='%H' -- <path>
ข้อเสียคือ--follow
ใช้งานได้กับไฟล์เดียวเท่านั้น
--follow
ใช้งานได้กับพา ธเดียวซึ่งอาจเป็นไดเรกทอรี หากผ่านไดเรกทอรีมันจะทำงานซ้ำและรายงานการเปลี่ยนแปลงไฟล์ทั้งหมดที่อยู่ด้านล่าง
หากคุณพยายามที่จะ - ติดตามไฟล์ที่ถูกลบในการใช้การกระทำก่อนหน้านี้
git log --follow -- filename
git
มือใหม่: ใช้git log -p --follow -- filename
เพื่อแสดงการเปลี่ยนแปลงเช่นกัน หมายเหตุ: "ชื่อไฟล์" สามารถเป็นไฟล์ไดเรคทอรีหรือ submodule
หากคุณต้องการดูการกระทำทั้งหมดที่เปลี่ยนไฟล์ในทุกสาขาให้ใช้สิ่งนี้:
git log --follow --all <filepath>
หากคุณต้องการค้นหาการกระทำทั้งหมดที่ทำfilename
และไม่ทำ filepath
ใช้:
git log --all -- '*.wmv'
หากคุณต้องการที่จะเห็นการเปลี่ยนแปลงทั้งหมดที่กระทำโดยยอมรับว่ามีการเปลี่ยนแปลงไฟล์ใดไฟล์หนึ่ง (แทนที่จะเป็นแค่การเปลี่ยนแปลงไฟล์เอง) คุณสามารถผ่าน--full-diff
:
git log -p --full-diff [branch] -- <path>
[branch]
ใช้git log --all <filename>
เพื่อดูข้อผูกพันที่มีอิทธิพล<filename>
ในทุกสาขา
gitk <path_to_filename>
สมมติว่าแพ็คเกจ "gitk" ได้รับการติดตั้งแล้ว
หากยังไม่ได้ติดตั้งให้ทำสิ่งนี้:
sudo apt-get install gitk
จากนั้นลองคำสั่งด้านบน มันมีไว้สำหรับ Linux ... มันอาจช่วยผู้ใช้งาน Linux ได้หากพวกเขาต้องการ GUI
gitk
มาพร้อมกับ Git สำหรับ Windows
เพื่อให้ได้รับรายการการใช้แฮชการกระทำ git rev-list
git rev-list HEAD <filename>
เอาท์พุท:
b7c4f0d7ebc3e4c61155c76b5ebc940e697600b1
e3920ac6c08a4502d1c27cea157750bd978b6443
ea62422870ea51ef21d1629420c6441927b0d3ea
4b1eb462b74c309053909ab83451e42a7239c0db
4df2b0b581e55f3d41381f035c0c2c9bd31ee98d
ซึ่งหมายความว่า 5 การกระทำได้สัมผัสไฟล์นี้ เป็นลำดับย้อนกลับดังนั้นการส่งครั้งแรกในรายการb7c4f0d7
จึงเป็นรายการล่าสุด
บน Linux คุณสามารถใช้ gitk สำหรับสิ่งนี้
สามารถติดตั้งได้โดยใช้ "sudo apt-get install git-gui gitk" มันสามารถใช้เพื่อดูการกระทำของไฟล์เฉพาะโดย "gitk <Filename>"
# Shows commit history with patch
git log -p -<no_of_commits> --follow <file_name>
# Shows brief details like "1 file changed, 6 insertions(+), 1 deletion(-)"
git log --stat --follow <file_name>