จะดูการเปลี่ยนแปลงโค้ดหลังจากดึงคอมไพล์ได้อย่างไร?


91

ฉันต้องการตรวจสอบการเปลี่ยนแปลงโค้ดใด ๆ หลังจากทำไฟล์git pull. ขณะนี้กำลังแสดงให้ฉันเห็นว่าไฟล์ใดเปลี่ยนแปลง ฉันจะดูได้อย่างไรว่าโค้ดอะไรเปลี่ยนแปลง


อ้างถึงนี้
Unrealsoul007

คำตอบ:


100
git log --name-status -2

จะแสดงชื่อไฟล์ที่เปลี่ยนแปลงสำหรับสองคอมมิตล่าสุด

git log -p -2

จะแสดงให้คุณเห็นการเปลี่ยนแปลงเอง

ก่อนที่คุณจะดึง

git fetch
git log --name-status origin/master..

จะแสดงให้คุณเห็นว่าคุณกำลังจะเรียกข้อมูลอะไรพร้อมกับชื่อของไฟล์


69

ก่อนที่จะดึง

คุณสามารถตรวจสอบการเปลี่ยนแปลงได้ตามที่ @iblue กล่าวพร้อม a fetchและdiffก่อนที่จะรวม:

$ git fetch
$ git diff master...origin/master

สังเกตช่วงเวลาสามช่วงซึ่งหมายความว่าแตกต่างจากพาเรนต์และต้นทาง / มาสเตอร์ที่ใช้ร่วมกัน (คอมมิตที่ทำเครื่องหมายxด้านล่าง):

SP---o---o [master]
  \
   x---x [origin/master]

หลังจากดึง

บรรทัดแรกในผลลัพธ์ของการดึงมีลักษณะดังนี้:

$ git pull
Updating 37b431a..b2615b4
...

จากนั้นคุณสามารถทำได้ง่ายๆ:

$ git diff 37b431a..b2615b4

หรือคำสั่งอื่นใด:

$ git log --name-status 37b431a..b2615b4

หลังจากนั้น

หากคุณดึงข้อมูลมาสักพักแล้วและคุณต้องการทราบว่าการดึงครั้งสุดท้ายเกิดการเปลี่ยนแปลงอะไรคุณสามารถค้นหาได้ด้วย:

$ git reflog | grep -A1 pull | head -2

ซึ่งจะแสดงแฮชหลังจากการดึงตามด้วยแฮชก่อนการดึง:

b2615b4 HEAD@{0}: pull : Fast-forward
37b431a HEAD@{1}: checkout: moving from v6.1 to master

จากนั้นคุณสามารถทำสิ่งเดียวกันกับแฮชทั้งสองนี้:

git diff 37b431a..b2615b4

3
นี่เป็นคำตอบเดียวที่ช่วยให้คุณตรวจสอบว่าไฟล์ใดมีการเปลี่ยนแปลงในระหว่างการดึงครั้งสุดท้ายเมื่อคุณจำไม่ได้ว่ามีการดึงคอมมิตกี่ครั้งในเวลานั้น
kremuwa

24

เนื่องจากgit pullเป็นเพียงทางลัดสำหรับgit fetchและgit mergeคุณสามารถเรียกใช้git fetchเพื่อดึงข้อมูลสาขาจากต้นทางจากนั้นแสดงความแตกต่างก่อนที่จะรวมเข้าด้วยกัน แบบนี้:

git fetch                      # Load changes from remote server
git diff master origin/master  # Show differences
git merge origin/master        # Merge remote changes with local changes

หากคุณเรียกใช้สาขาอื่นที่ไม่ใช่สาขาหลักแน่นอนคุณควรเปลี่ยนชื่อสาขาในคำสั่งด้านบน


1
`` git diff - ต้นกำเนิดต้นแบบชื่อเท่านั้น / master [path] ``
jiacheo

10

คุณสามารถเปรียบเทียบเนื้อหาที่ดึงมากับแหล่งที่มาของการกระทำก่อนหน้านี้ทันทีโดย

git diff branch_name@{1}

เช่น:

git diff master@{1}

สำหรับการเปรียบเทียบกับแหล่งที่มาที่ n ยอมรับ

git diff branch_name@{n}

3
นี่คือคำตอบที่ดี แต่คำอธิบายที่ไม่ถูกต้อง: "สำหรับเปรียบเทียบกับแหล่ง n กระทำที่อยู่เบื้องหลัง" @{n}ไวยากรณ์จริงหมายความว่าnthก่อนหน้านี้ตำแหน่งของสาขา / หัว ตัวอย่างเช่นถ้ามีการกระทำที่ 10 ตั้งแต่ครั้งสุดท้ายที่คุณได้ดึงที่master@{1}จะอ้างถึงก่อนตำแหน่งของmasterซึ่งเป็น 10 กระทำก่อน นี่คือเหตุผลว่าทำไมการใช้@{n}จึงมีประโยชน์สำหรับการตรวจสอบการเปลี่ยนแปลงหลังจากดึง
wisbucky

นี่คือคำตอบที่ฉันกำลังมองหา! ขอบคุณสำหรับคำอธิบาย @wisbucky
tamerlaha

5

คุณสามารถตรวจสอบสิ่งที่เปลี่ยนแปลงได้ในขณะที่ผลักและดึงตามนี้ ...

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