ดูการเปลี่ยนแปลงในไฟล์ที่ระบุโดยใช้ git


472

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

ฉันจะตรวจสอบเฉพาะการเปลี่ยนแปลงในไฟล์เดียวได้อย่างไร ไฟล์พูดว่าฉันมีการเปลี่ยนแปลงfile_1.rb, file_2.rb, ... , แต่ผมสนใจเฉพาะในการเปลี่ยนแปลงในแฟ้มfile_N.rb file_2.rbฉันจะตรวจสอบการเปลี่ยนแปลงเหล่านี้ได้อย่างไร (ก่อนที่จะส่งมอบ)


1
เป็นไปได้ที่ซ้ำกันของวิธีการดูประวัติไฟล์ใน Git?
CharlesB

4
คำถามหลักของฉันคือวิธีตรวจสอบความแตกต่างของไฟล์เฉพาะก่อนที่จะส่งมอบการเปลี่ยนแปลงทั้งหมด บันทึก Git สำหรับการเปลี่ยนแปลงที่มุ่งมั่นฉันเดา
เมลลอน

คำตอบ:


642

ใช้คำสั่งเช่น:

git diff file_2.rb

ดูgit diffเอกสารประกอบสำหรับข้อมูลทั้งหมดเกี่ยวกับประเภทของสิ่งต่าง ๆ ที่คุณสามารถรับได้

โดยปกติแล้วgit diffจะแสดงการเปลี่ยนแปลงทั้งหมดในที่เก็บข้อมูลทั้งหมด(ไม่ใช่เฉพาะไดเรกทอรีปัจจุบัน)


100
หากคุณต้องการที่จะเห็นการเปลี่ยนแปลงของไฟล์ที่คุณได้ "git เพิ่ม" 'ed อยู่แล้วมันคือ "git diff --cached"
Ana Betts

8
หากคุณต้องการตรวจสอบไฟล์กับการคอมมิชชันเก่า: $ git diff [commit hash] file_2.rb
Alex Angelico

2
วิธีออกจากมุมมองต่าง
Garry

1
หรือใช้ SourceTree
GeneCode

4
@GurpreetsinghDhanju ลองกด Q

110

วิธีการอื่น (ที่กล่าวถึงในคำตอบ SO นี้ ) จะเก็บประวัติไว้ในเทอร์มินัลและให้บันทึกการติดตามของตัวไฟล์:

git log --follow -p -- file

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

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


3
ทำงานได้ดีกับ - ให้มีภาพรวมของบรรทัดที่เพิ่ม / ลบ
Tom Hale

2
ใช่คำตอบนี้ควรอยู่ในอันดับที่สูงกว่าอย่างน้อยติดตามประวัติไม่เพียง แต่ความต่างในปัจจุบันและคุณไม่ต้องติดตามแฮชการกระทำทั้งหมด การใช้งานที่ค่อนข้างเรียบง่าย แต่ทรงประสิทธิภาพในการเปลี่ยนแปลง
Ilhicas

87

คุณสามารถใช้gitk [filename]เพื่อดูบันทึกการเปลี่ยนแปลง


2
นี่จะแสดงประวัติของการผูกมัดในไฟล์ซึ่งบางครั้งอาจเป็นสิ่งที่คุณต้องการ
r1k0

26

คุณสามารถใช้คำสั่งด้านล่างเพื่อดูว่าใครมีการเปลี่ยนแปลงสิ่งที่อยู่ในไฟล์

git blame <filename>


4
นี่คือคำตอบที่ดีที่สุดที่จะบอกคุณว่าใครทำอะไรเปลี่ยนแปลงและเมื่อใดรวมถึงการยอมรับว่าการเปลี่ยนแปลงนั้นเป็นส่วนหนึ่งของ หากต้องการกรองการเปลี่ยนแปลงเฉพาะให้ทำในgit blame <filename> | grep <searchfor>ที่ที่<searchfor>มีค่าสั้น ๆ ตัวอย่างเช่นในการหาผู้ที่มีการเปลี่ยนแปลงfooไปbarในdist/index.phpคุณจะใช้git blame dist/index.php | grep bar
Kraang นายกรัฐมนตรี

15

คุณสามารถดำเนินการ

git status -s

นี่จะแสดงชื่อไฟล์ที่แก้ไขแล้วโดยคัดลอกพา ธ ไฟล์ที่สนใจคุณสามารถดูการเปลี่ยนแปลงโดยใช้ git diff

git diff <filepath + filename>

8

เพื่อแสดงรายการยอมรับเฉพาะรายละเอียดสำหรับการเปลี่ยนแปลงไฟล์เฉพาะ

git log --follow file_1.rb

เพื่อแสดงรายการความแตกต่างระหว่างการผูกพันต่าง ๆ สำหรับไฟล์เดียวกัน

git log -p file_1.rb

เพื่อแสดงรายการกระทำและข้อความ

git log --follow --oneline file_1.rb

5

คุณสามารถลอง

git show <filename>

สำหรับการคอมมิทคอมไพล์โชว์จะแสดงข้อความบันทึกและข้อความที่เป็นข้อความ (ระหว่างไฟล์ของคุณกับเวอร์ชันที่คอมมิทชันไฟล์)

คุณสามารถตรวจสอบเอกสารการแสดง gitสำหรับข้อมูลเพิ่มเติม



0

เห็นด้วยอย่างสมบูรณ์กับ @Greg Hewgill

และหากเส้นทางของคุณมีช่องว่างคุณอาจใช้ลองเพิ่มด้วยเครื่องหมายวรรคตอน'หรือ `

git diff 'MyProject / โฟลเดอร์ของฉัน / โฟลเดอร์ย่อยของฉัน / file_2.rb'

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