ดูประวัติการเปลี่ยนแปลงของไฟล์โดยใช้เวอร์ชัน Git


3088

ฉันจะดูประวัติการเปลี่ยนแปลงของไฟล์แต่ละไฟล์ใน Git ได้อย่างไรรายละเอียดที่สมบูรณ์เกี่ยวกับสิ่งที่เปลี่ยนแปลงไป?

ฉันได้เท่าที่:

git log -- [filename]

ซึ่งแสดงประวัติการกระทำของไฟล์ แต่ฉันจะดูเนื้อหาของแต่ละไฟล์ได้อย่างไร

ฉันพยายามที่จะทำให้การเปลี่ยนแปลงจาก MS SourceSafe และที่เคยเป็นที่เรียบง่าย→right-clickshow history


41
ลิงค์ด้านบนไม่สามารถใช้งานได้อีกต่อไป ลิงค์นี้ใช้งานได้ในวันนี้: Git Community Book
chris

1
ลิงค์ด้านบน (โพสต์โดย Chris) ไม่ถูกต้องอีกต่อไป ลิงค์นี้ใช้งานได้ในวันนี้: git-scm.com/book/en/v2
Cog

คำตอบ:


2370

สำหรับสิ่งนี้ฉันจะใช้:

gitk [filename]

หรือทำตามการเปลี่ยนชื่อไฟล์ในอดีต

gitk --follow [filename]

28
แต่ผมค่อนข้างแม้มีเครื่องมือที่รวมกันดังกล่าวข้างต้นด้วย 'คอมไพล์โทษ' ช่วยให้ผมเรียกดูแหล่งที่มาของไฟล์ในขณะที่มันมีการเปลี่ยนแปลงในเวลาที่ ...
Egon Willighagen

26
น่าเสียดายที่สิ่งนี้ไม่ได้ติดตามประวัติของการเปลี่ยนชื่อไฟล์ที่ผ่านมา
Dan Molding

146
ฉันยังมองหาประวัติของไฟล์ที่ถูกเปลี่ยนชื่อก่อนหน้านี้และพบว่าหัวข้อนี้ก่อน การแก้ปัญหาคือการใช้ "บันทึกการคอมไพล์ --follow <ชื่อไฟล์>" เป็นฟิลชี้ให้เห็นที่นี่
Florian Gutmann

115
ผู้เขียนกำลังมองหาเครื่องมือบรรทัดคำสั่ง ในขณะที่ gitk มาพร้อมกับ GIT มันไม่ใช่แอพบรรทัดคำสั่งหรือ GUI ที่ดีโดยเฉพาะ
mikemaccana

72
เขากำลังมองหาเครื่องมือบรรทัดคำสั่งหรือไม่? "คลิกขวา -> แสดงประวัติ" ไม่ได้บอกเป็นนัย
hdgarrood

2234

คุณสามารถใช้ได้

git log -p filename

เพื่อให้ git สร้าง patch สำหรับแต่ละรายการบันทึก

ดู

git help log

สำหรับตัวเลือกเพิ่มเติม - จริง ๆ แล้วสามารถทำสิ่งดี ๆ มากมาย :) เพื่อให้ได้ความแตกต่างสำหรับความมุ่งมั่นเฉพาะที่คุณสามารถทำได้

git show HEAD 

หรือการแก้ไขอื่น ๆ โดยตัวระบุ หรือใช้

gitk

เพื่อเรียกดูการเปลี่ยนแปลงที่มองเห็นได้


8
git show HEAD แสดงไฟล์ทั้งหมดคุณรู้วิธีการติดตามไฟล์แต่ละไฟล์ (ขณะที่ Richard กำลังขอ)
Jonas Byström

5
คุณใช้: git show <revision> - ชื่อไฟล์ที่จะแสดง diffs สำหรับการแก้ไขนั้นในกรณีที่มีอยู่
Marcos Oliveira

4
--stat ก็มีประโยชน์เช่นกัน คุณสามารถใช้มันร่วมกับ -p
Raffi Khatchadourian

5
มันเยี่ยมมาก gitk ทำงานได้ไม่ดีเมื่อระบุเส้นทางที่ไม่มีอยู่อีกต่อไป ฉันใช้ git log -p - path
Paulo Casaretto

6
ดูเหมือนว่ามันจะถูกสร้างขึ้นโดยสัตว์ประหลาดบูกี้ นี่คือคำตอบที่ดีและเหมาะกับคำถามต้นฉบับ
ghayes

1496

git log --follow -p -- path-to-file

การดำเนินการนี้จะแสดงประวัติทั้งหมดของไฟล์ (รวมถึงประวัติที่นอกเหนือจากการเปลี่ยนชื่อและมีการเปลี่ยนแปลงต่างกัน)

ในคำอื่น ๆ ถ้าไฟล์ที่มีชื่อbarถูกเสนอชื่อครั้งเดียวfooแล้วgit log -p bar(โดยไม่มี--followตัวเลือก) จะแสดงประวัติความเป็นมาของไฟล์ได้ถึงจุดที่มันถูกเปลี่ยนชื่อ - fooมันจะไม่แสดงประวัติความเป็นมาของไฟล์เมื่อมันเป็นที่รู้จัก การใช้git log --follow -p barจะแสดงประวัติทั้งหมดของไฟล์รวมถึงการเปลี่ยนแปลงใด ๆ fooในแฟ้มเมื่อมันเป็นที่รู้จัก -pตัวเลือกเพื่อให้แน่ใจว่า diffs จะมีอยู่ในการเปลี่ยนแปลงแต่ละ


18
--stat ก็มีประโยชน์เช่นกัน คุณสามารถใช้มันร่วมกับ -p
Raffi Khatchadourian

23
ฉันเห็นด้วยว่านี่คือคำตอบที่แท้จริง (1. ) --followทำให้แน่ใจว่าคุณเห็นการเปลี่ยนชื่อไฟล์ (2. ) -pทำให้แน่ใจว่าคุณเห็นว่าไฟล์มีการเปลี่ยนแปลงอย่างไร (3. ) เป็นบรรทัดคำสั่งเท่านั้น
เทรเวอร์บอยด์สมิ ธ

3
@NHDaly ฉันสังเกตเห็นว่ามีการ--เพิ่ม แต่ฉันไม่รู้ว่าทำไมมันถึงดีที่สุด? มันจะทำอะไร?
Benjohn

40
@Benjohn --ตัวเลือกนี้จะบอก Git ว่าถึงจุดสิ้นสุดของตัวเลือกแล้วและสิ่งใดก็ตามที่ตามมา--ควรถือเป็นอาร์กิวเมนต์ สำหรับgit logสิ่งนี้จะสร้างความแตกต่างหากคุณมีชื่อพา ธ ที่ขึ้นต้นด้วยเส้นประ สมมติว่าคุณต้องการทราบประวัติของไฟล์ที่มีชื่อที่โชคร้าย "- ผู้ติดตาม":git log --follow -p -- --follow
Dan Molding

10
@Benjohn: โดยปกติแล้ว--มีประโยชน์เพราะมันสามารถป้องกันrevisionชื่อใด ๆที่ตรงกับชื่อไฟล์ที่คุณป้อนซึ่งอาจน่ากลัวจริง ๆ ตัวอย่างเช่นหากคุณมีทั้งสาขาและไฟล์ชื่อfoo, git log -p fooจะแสดงประวัติบันทึกการคอมไพล์ขึ้นไปfooไม่ประวัติศาสตร์สำหรับไฟล์ fooแต่ @DanMoulding นั้นถูกต้องเนื่องจาก--followคำสั่งนั้นใช้ชื่อไฟล์เพียงอันเดียวเป็นอาร์กิวเมนต์มันจึงมีความจำเป็นน้อยกว่าเพราะมันไม่สามารถเป็นrevisionได้ ฉันเพิ่งเรียนรู้ว่า บางทีคุณอาจถูกทิ้งไว้จากคำตอบของคุณแล้ว; ฉันไม่แน่ใจ.
NHDaly

172

หากคุณชอบที่จะอยู่แบบข้อความที่คุณอาจต้องการที่จะใช้TIG

ติดตั้งด่วน:

  • ฉลาด - รับ :# apt-get install tig
  • Homebrew (OS X) :$ brew install tig

ใช้เพื่อดูประวัติในไฟล์เดียว: tig [filename]
หรือเรียกดูประวัติ repo โดยละเอียด:tig

คล้ายกับgitkแต่ตามข้อความ รองรับสีใน terminal!


23
เครื่องมือข้อความที่ยอดเยี่ยมคำตอบที่ดี ฉันประหลาดใจเมื่อเห็นการอ้างอิงสำหรับการติดตั้ง gitk บนเซิร์ฟเวอร์หัวขาด จะโหวตอีกครั้ง A +++
Tom McKenzie

คุณสามารถดูไฟล์เฉพาะด้วย tig ได้เช่นtig -- path/to/specific/file
gloriphobia

109

git whatchanged -p filenameก็เท่ากับgit log -p filenameในกรณีนี้

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


4
1 แต่ไม่ได้เป็นตัวเลือกในคำสั่งfilename git blame filename
rockXrock

7
"ผู้ใช้ใหม่ได้รับการสนับสนุนให้ใช้ git-log แทน (... ) คำสั่งจะถูกเก็บไว้เป็นหลักด้วยเหตุผลทางประวัติศาสตร์"
ciastek

105

ผู้ใช้ SourceTree

หากคุณใช้ SourceTree เพื่อให้เห็นภาพพื้นที่เก็บข้อมูลของคุณ (มันฟรีและค่อนข้างดี) คุณสามารถคลิกขวาที่ไฟล์แล้วเลือกLog Selected

ป้อนคำอธิบายรูปภาพที่นี่

จอแสดงผล (ด้านล่าง) นั้นเป็นมิตรกว่า gitk และเป็นตัวเลือกอื่น ๆ น่าเสียดายที่ (ในเวลานี้) ไม่มีวิธีที่ง่ายในการเปิดมุมมองนี้จากบรรทัดคำสั่ง - ปัจจุบัน CLI ของ SourceTree เพิ่งเปิด repos

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันชอบตัวเลือก "ติดตามการเปลี่ยนชื่อไฟล์" ซึ่งช่วยให้คุณดูว่าไฟล์ถูกเปลี่ยนชื่อหรือย้าย
Chris

แต่ถ้าฉันเข้าใจผิด (โปรดบอกให้ฉันรู้!) เราสามารถเปรียบเทียบรุ่นสองรุ่นในเวลาเดียวกันใน gui ได้หรือไม่ มีลูกค้าที่มีอินเตอร์เฟซที่สวยงามสำหรับรุ่นที่แตกต่างกันหลายครั้ง? อาจเป็นไปได้ที่มีมุมมองซูมออกเช่นใน Sublime Text? นั่นจะเป็นประโยชน์จริง ๆ ฉันคิดว่า
Sam Lewallen

@SamLewallen ถ้าฉันเข้าใจถูกต้องคุณต้องการเปรียบเทียบสามคอมมิชชันที่แตกต่างกันหรือไม่? สิ่งนี้ฟังดูคล้ายกับการผสานสามทาง (ของฉัน, ของคุณ, ฐาน) - โดยปกติแล้วกลยุทธ์นี้จะใช้สำหรับการแก้ไขข้อขัดแย้งในการผสานที่ไม่จำเป็นต้องเปรียบเทียบข้อผูกพันสามข้อใด ๆ มีเครื่องมือมากมายที่รองรับสามทางในการผสานstackoverflow.com/questions/10998728/ …แต่เคล็ดลับคือการให้เครื่องมือเหล่านี้ในการแก้ไขเฉพาะgitready.com/intermediate/2009/02/27/…
มาร์คฟ็อกซ์

ขอบคุณ Mark Fox นั่นคือสิ่งที่ฉันหมายถึง คุณรู้จักแอปพลิเคชันที่จะทำเช่นนั้นหรือไม่?
Sam Lewallen

1
@ MarnenLaibow-Koser ฉันจำไม่ได้ว่าทำไมฉันถึงต้องการ SHA ในเวลานั้น ฮ่า ๆ ๆ
AechoLiu

63

หากต้องการแสดงสิ่งที่ผู้แก้ไขและผู้แก้ไขแก้ไขล่าสุดแต่ละบรรทัดของไฟล์:

git blame filename

หรือถ้าคุณต้องการใช้ GUI โทษที่ทรงพลัง:

git gui blame filename

49

สรุปคำตอบอื่น ๆ หลังจากอ่านและเล่นไปเล็กน้อย:

คำสั่งบรรทัดคำสั่งปกติจะเป็น

git log --follow --all -p dir/file.c

แต่คุณยังสามารถใช้ gitk (gui) หรือ tig (text-ui) เพื่อดูวิธีที่มนุษย์อ่านได้

gitk --follow --all -p dir/file.c

tig --follow --all -p dir/file.c

ภายใต้เดเบียน / อูบุนตูคำสั่งติดตั้งสำหรับเครื่องมือที่น่ารักเหล่านี้เป็นไปตามที่คาดไว้:

sudo apt-get install gitk tig

และฉันกำลังใช้:

alias gdf='gitk --follow --all -p'

เพื่อที่ฉันสามารถเพียงพิมพ์จะได้รับการเน้นประวัติศาสตร์ของทุกอย่างในไดเรกทอรีย่อยgdf dirdir


2
ฉันคิดว่านี่เป็นคำตอบที่ดี บางทีคุณอาจจะไม่ได้รับการโหวตด้วยเช่นกันเพราะคุณตอบวิธีอื่น (ดีกว่า IMHO) เพื่อดูการเปลี่ยนแปลงเช่นผ่าน gitk และ tig นอกเหนือจาก git
PopcornKing

เพียงเพื่อเพิ่มที่จะตอบ ค้นหาพา ธ (ในพื้นที่คอมไพล์ซึ่งมีอยู่ในที่เก็บข้อมูล) จากนั้นใช้คำสั่งที่ระบุไว้ข้างต้น "บันทึก git --follow - all -p <folder_path / file_path>" อาจมีกรณีที่ filde / โฟลเดอร์จะถูกลบออกไปในประวัติศาสตร์จึงหาเส้นทางสูงสุดที่ยังคงอยู่และพยายามดึงประวัติของมัน ได้ผล!
ปรสิต

2
--allสำหรับทุกสาขาส่วนที่เหลือจะอธิบายไว้ในคำตอบของ @ Dan
cregox

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

25

เพิ่มชื่อแทนนี้ใน. gitconfig ของคุณ:

[alias]
    lg = log --all --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset'\n--abbrev-commit --date=relative

และใช้คำสั่งเช่นนี้:

> git lg
> git lg -- filename

เอาต์พุตจะมีลักษณะเกือบจะเหมือนกับเอาต์พุต gitk สนุก.


หลังจากที่ฉันรันทางลัดของ lg ฉันก็พูด (และฉันพูด) "สวย!" อย่างไรก็ตามโปรดทราบว่า "\ n" หลังจาก "- กราฟ" เป็นข้อผิดพลาด
jmbeck

3
นอกจากนี้ยังสามารถใช้งานได้git lg -p filename- มันคืนค่าความแตกต่างที่สวยงามของไฟล์สืบค้น
Egel

22

เมื่อเร็ว ๆ นี้ฉันค้นพบ tigและพบว่ามีประโยชน์มาก มีบางกรณีที่ฉันอยากให้มันเป็น A หรือ B แต่ส่วนใหญ่มันค่อนข้างเรียบร้อย

สำหรับกรณีของคุณtig <filename>อาจเป็นสิ่งที่คุณกำลังมองหา

http://jonas.nitro.dk/tig/


ใน centos yum install tig
zzapper

17

คุณสามารถใช้ vscode กับGitLensเป็นเครื่องมือที่ทรงพลังมาก หลังจากติดตั้ง GitLens แล้วให้ไปที่แท็บ GitLens เลือกFILE HISTORYและคุณสามารถเรียกดูได้

ป้อนคำอธิบายรูปภาพที่นี่


15

ฉันเขียนการเล่นคอมไพล์ด้วยจุดประสงค์ที่แน่นอนนี้

pip install git-playback
git playback [filename]

สิ่งนี้มีประโยชน์ในการแสดงผลลัพธ์ในบรรทัดคำสั่ง (เช่นgit log -p) ในขณะที่ให้คุณดำเนินการแต่ละขั้นตอนโดยใช้ปุ่มลูกศร (เช่นgitk)


13

หรือ:

gitx -- <path/to/filename>

หากคุณใช้gitx


1
ด้วยเหตุผลบางอย่าง gitx ของฉันเปิดขึ้นว่างเปล่า
IgorGanapolsky

@IgorGanapolsky คุณต้องแน่ใจว่าคุณอยู่ที่รากของพื้นที่เก็บข้อมูลคอมไพล์ของคุณ
zdsbs

9

หากคุณต้องการดูประวัติทั้งหมดของไฟล์รวมถึงในสาขาอื่นทั้งหมดใช้:

gitk --all <filename>

9

นอกจากนี้คุณยังสามารถลองสิ่งนี้ซึ่งแสดงรายการการกระทำที่เปลี่ยนแปลงส่วนเฉพาะของไฟล์ (นำไปใช้ใน Git 1.8.4)

ผลลัพธ์ที่ส่งคืนจะเป็นรายการข้อผูกพันที่แก้ไขส่วนนี้โดยเฉพาะ คำสั่ง:

git log --pretty=short -u -L <upperLimit>,<lowerLimit>:<path_to_filename>

โดยที่ upperLimit คือ start_line_number และ lowerLimit คือ termin_line_number ของไฟล์

รายละเอียดเพิ่มเติมได้ที่https://www.techpurohit.com/list-some-useful-git-commands


7

ด้วยยอดเยี่ยมGit ส่วนขยายของคุณไปยังจุดในประวัติศาสตร์ที่ไฟล์นั้นยังคงดำรงอยู่ (ถ้ามันถูกลบไปแล้วมิฉะนั้นเพียงแค่ไปที่หัว) สลับไปยังแท็บคลิกขวาที่ไฟล์และเลือกFile treeFile history

โดยค่าเริ่มต้นมันตามไฟล์ผ่านการเปลี่ยนชื่อและBlameแท็บช่วยให้เห็นชื่อในการแก้ไขที่กำหนด

มี gotchas เล็กน้อยบางอย่างเช่นแสดงfatal: Not a valid object nameในViewแท็บเมื่อคลิกที่การแก้ไขการลบ แต่ฉันสามารถอยู่กับสิ่งนั้นได้ :-)


เป็นที่น่าสังเกตว่านี่เป็น Windows เท่านั้น
Evan Hahn

3
@EvanHahn ไม่ถูกต้องผ่านโมโนหนึ่งสามารถใช้ GitExtension บน Linux เราใช้มันบน Ubuntu และมีความสุขมากกับมัน ดูgit-extensions-documentation.readthedocs.org/en/latest/…
Shmil The Cat

7

หากคุณใช้ git GUI (บน Windows) ภายใต้เมนูที่เก็บคุณสามารถใช้ "Visualize master's History" ไฮไลต์การคอมมิตในบานหน้าต่างด้านบนและไฟล์ที่ด้านล่างขวาและคุณจะเห็นความแตกต่างของการคอมมิตที่ด้านล่างซ้าย


คำถามนี้จะตอบคำถามได้อย่างไร
jmbeck

3
OP ไม่ได้ระบุบรรทัดคำสั่งและย้ายจาก SourceSafe (ซึ่งเป็น GUI) ดูเหมือนว่าเกี่ยวข้องกับการชี้ให้เห็นว่าคุณสามารถทำสิ่งเดียวกับที่คุณสามารถทำได้ใน VSS ใน Git GUI บน Windows
cori

6

SmartGit :

  1. ในเมนูเปิดใช้งานเพื่อแสดงไฟล์ที่ไม่เปลี่ยนแปลง: ดู / แสดงไฟล์ที่ไม่เปลี่ยนแปลง
  2. คลิกขวาที่ไฟล์และเลือก 'บันทึก' หรือกด 'Ctrl-L'

4

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

git diff --cached

1
หากคุณต้องการที่จะรวมการเปลี่ยนแปลงในพื้นที่ (ไม่มีการติดตั้ง) ฉันมักจะเรียกใช้git diff origin/masterเพื่อแสดงความแตกต่างที่สมบูรณ์ระหว่างสาขาในพื้นที่ของคุณและสาขาหลัก (ซึ่งสามารถอัปเดตจากระยะไกลผ่านทางgit fetch)
ghayes

4

ถ้าคุณใช้ TortoiseGit TortoiseGit --> Show Logคุณควรจะสามารถคลิกขวาที่ไฟล์และทำ ในหน้าต่างที่ปรากฏขึ้นตรวจสอบให้แน่ใจว่า:

  • ' Show Whole Projectตัวเลือก' ไม่ได้ตรวจสอบ

  • ' All Branchesตัวเลือก' การตรวจสอบ


TortoiseGit (และ Eclipse Git เช่นกัน) ไม่ว่าจะมีการแก้ไขไฟล์ที่เลือกไว้อย่าเชื่อเลย!
Noam Manos

@NoamManos ฉันไม่พบปัญหาดังกล่าวดังนั้นฉันไม่สามารถตรวจสอบว่าคำสั่งของคุณถูกต้องหรือไม่
3885927

ความผิดพลาดของฉันมันเกิดขึ้นใน Eclipse เท่านั้น แต่ใน TortoiseGit คุณสามารถดูการแก้ไขทั้งหมดของไฟล์หากไม่เลือก "แสดงโครงการทั้งหมด" + การตรวจสอบ "สาขาทั้งหมด" (ในกรณีที่ไฟล์ถูกส่งไปยังสาขาอื่นก่อนที่จะรวมเข้ากับหลัก สาขา). ฉันจะอัปเดตคำตอบของคุณ
Noam Manos

3

git diff -U <filename> ให้ความแตกต่างแบบครบวงจร

มันควรจะเป็นสีแดงและเขียว หากไม่ใช่ให้เรียกใช้: git config color.ui autoก่อน


2

หากคุณกำลังใช้ eclipse กับปลั๊กอิน git มันมีมุมมองการเปรียบเทียบที่ยอดเยี่ยมพร้อมประวัติ คลิกขวาที่ไฟล์และเลือก "เปรียบเทียบกับ" => "ประวัติ"


ที่จะไม่อนุญาตให้คุณค้นหาไฟล์ที่ถูกลบอย่างไรก็ตาม
avgvstvs

การเปรียบเทียบไฟล์สองเวอร์ชันนั้นแตกต่างจากการดูประวัติการเปลี่ยนแปลงของไฟล์
golimar

0

ฉันอาจเกี่ยวกับที่ OP เมื่อเริ่มต้นนี้กำลังมองหาสิ่งที่ง่ายที่จะให้ฉันใช้gft difftoolกับvimdiffเพื่อตรวจสอบการเปลี่ยนแปลงไฟล์ใน repo ของฉันเริ่มต้นจากการกระทำที่เฉพาะเจาะจง ฉันไม่มีความสุขเกินไปกับคำตอบที่ฉันพบดังนั้นฉันจึงได้โยนสคริปต์git inc remental rep orter (gitincrep) นี้ไว้ด้วยกันและมันมีประโยชน์สำหรับฉัน:

#!/usr/bin/env bash

STARTWITH="${1:-}"
shift 1

DFILES=( "$@" )

RunDiff()
{
        GIT1=$1
        GIT2=$2
        shift 2

        if [ "$(git diff $GIT1 $GIT2 "$@")" ]
        then
                git log ${GIT1}..${GIT2}
                git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
        fi
}

OLDVERS=""
RUNDIFF=""

for NEWVERS in $(git log --format=format:%h  --reverse)
do
        if [ "$RUNDIFF" ]
        then
                RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
        elif [ "$OLDVERS" ]
        then
                if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
                then
                        RUNDIFF=true
                        RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
                fi
        fi
        OLDVERS=$NEWVERS
done

เรียกว่าไม่มี args สิ่งนี้จะเริ่มต้นจากจุดเริ่มต้นของประวัติ repo มิฉะนั้นจะเริ่มต้นด้วยสิ่งใดก็ตามที่แฮชที่คุณให้และดำเนินการจนถึงปัจจุบัน - คุณสามารถ ctrl-C ได้ตลอดเวลาเพื่อออก สิ่งใด ๆ หลังจากแรกจะ จำกัด รายงานความแตกต่างที่จะรวมเฉพาะไฟล์ที่ระบุใน args เหล่านั้น (ซึ่งฉันคิดว่าเป็นสิ่งที่ OP ต้องการและฉันขอแนะนำสำหรับทุกคนยกเว้นโครงการขนาดเล็ก) หากคุณกำลังตรวจสอบการเปลี่ยนแปลงไฟล์เฉพาะและต้องการเริ่มต้นตั้งแต่ต้นคุณจะต้องระบุสตริงว่างสำหรับ arg1 หากคุณไม่ใช่ผู้ใช้กลุ่มคุณสามารถแทนที่vimdiffด้วยเครื่องมือ diff ที่คุณโปรดปราน

พฤติกรรมคือการส่งออกความคิดเห็นกระทำเมื่อพบการเปลี่ยนแปลงที่เกี่ยวข้องและเริ่มเสนอvimdiffทำงานสำหรับไฟล์ที่เปลี่ยนแปลงแต่ละไฟล์ (นั่นคือgif difftoolพฤติกรรม แต่การทำงานที่นี่)

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


0

ฉันพบวิธีแก้ไขที่ง่ายมากในการค้นหาประวัติของไฟล์อย่างรวดเร็ว

  1. ทำการเปลี่ยนแปลงแบบสุ่มในไฟล์
  2. มันจะแสดงว่าเป็นการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดบน sourcetree ของคุณ
  3. คลิกขวาที่ไฟล์และเลือก 'Log Selected'

ป้อนคำอธิบายรูปภาพที่นี่

มันจะแสดงประวัติของการกระทำทั้งหมด


GUI นี้มาจากไหน
colidyre

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