ฉันจะแตกไฟล์พูดpom.xmlจากสาขาหลักไปเป็นรุ่นเก่าโดยพลการใน Git ได้อย่างไร?
ฉันจะแตกไฟล์พูดpom.xmlจากสาขาหลักไปเป็นรุ่นเก่าโดยพลการใน Git ได้อย่างไร?
คำตอบ:
คุณทำได้:
git diff master~20:pom.xml pom.xml
... เพื่อเปรียบเทียบค่าปัจจุบันของคุณpom.xmlกับค่าที่masterแก้ไขจาก20 รายการที่ผ่านมากับรายการหลัก คุณสามารถเปลี่ยนmaster~20ของหลักสูตรที่มีชื่อวัตถุ (SHA1sum) ของการกระทำหรือใด ๆ ของวิธีการอื่น ๆ ของการระบุการแก้ไข
โปรดทราบว่านี่เป็นการเปรียบเทียบpom.xmlเวอร์ชั่นเก่ากับเวอร์ชันในแผนผังการทำงานของคุณไม่ใช่เวอร์ชันที่คอมmasterมิท หากคุณต้องการสิ่งนั้นคุณสามารถทำสิ่งต่อไปนี้แทน:
git diff master~20:pom.xml master:pom.xml
git diff <revision> <path>
ตัวอย่างเช่น:
git diff b0d14a4 foobar.txt
หากคุณต้องการเห็นความแตกต่างระหว่างการกระทำครั้งสุดท้ายของไฟล์เดียวคุณสามารถทำได้:
git log -p -1 filename
นี่จะให้ความแตกต่างของไฟล์เป็น git ไม่ใช่การเปรียบเทียบไฟล์โลคอลของคุณ
-1ขั้นตอนจนกว่าคุณจะได้รับการเปลี่ยนแปลง
gitlog () { git log -${3:-p} -${2:-1} $1; } ใช้แล้วชอบgitlog Rakefileหรือและgitlog Rakefile 5 gitlog Rakefile 10 sครั้งแรกที่แสดงหนึ่งแตกต่าง; ครั้งที่สองแสดงห้า diffs; --no-patchที่สามแสดงสิบ
หากต้องการดูสิ่งที่เปลี่ยนแปลงในไฟล์ในการคอมมิทล่าสุด:
git diff HEAD~1 path/to/file.
คุณสามารถเปลี่ยนจำนวน (~ 1) เป็นความมุ่งมั่นที่ n ที่คุณต้องการได้
ไวยากรณ์ทั่วไป:
$git diff oldCommit..newCommit -- **FileName.xml > ~/diff.txt
สำหรับไฟล์ทั้งหมดที่ชื่อ "FileName.xml" ที่ใดก็ได้ใน repo ของคุณ
สังเกตเห็นช่องว่างระหว่าง "-" และ "**"
คำตอบสำหรับคำถามของคุณ:
$git checkout master
$git diff oldCommit..HEAD -- **pom.xml
or
$git diff oldCommit..HEAD -- relative/path/to/pom.xml
คุณสามารถใช้แท็ก / sha1 / "HEAD ^" เช่นเดียวกับ git
ทดสอบกับ git 1.9.1 บน Ubuntu
หากไม่ยอมรับว่า HEAD ของคุณการขยายตัวของ bash นั้นมีประโยชน์จริง ๆ โดยเฉพาะถ้าชื่อไฟล์ของคุณยาวตัวอย่างข้างบน:
git diff master~20:pom.xml master:pom.xml
จะกลายเป็น
git diff {master~20,master}:pom.xml
เพิ่มเติมเกี่ยวกับการขยายรั้งด้วยทุบตี
สำหรับการเปรียบเทียบกับ 5 กระทำกับค่าปัจจุบันทั้งบนmasterเพียงแค่ทำ:
git diff master~5:pom.xml master:pom.xml
นอกจากนี้คุณสามารถอ้างถึงหมายเลขแฮ็ชตัวอย่างเช่นถ้าหมายเลขแฮชx110bd64คุณสามารถทำสิ่งนี้เพื่อดูความแตกต่าง:
git diff x110bd64 pom.xml
git diff -w HEAD Origin / master path / to / file
git diff master~20 -- pom.xml
ใช้งานได้หากคุณไม่ได้อยู่ในสาขาหลักเช่นกัน
หากคุณใช้เครื่องมือกราฟิก (หรือชอบมัน) คุณสามารถ:
gitk pom.xml
ใน gitk คุณสามารถคลิกกระทำใด ๆ (เพื่อ "เลือก" มัน) และคลิกขวาที่กระทำอื่น ๆ เพื่อเลือก "Diff this -> selected" หรือ "Diff select -> this" ในเมนูป๊อปอัพขึ้นอยู่กับลำดับที่คุณต้องการ
หากคุณต้องการกระจายไฟล์เดียวในที่เก็บตัวอย่างเช่นคุณสามารถทำได้
git diff stash@{0} -- path/to/file
หากคุณกำลังมองหาส่วนต่างของการคอมมิทเฉพาะและคุณต้องการใช้ github UI แทนบรรทัดคำสั่ง (บอกว่าคุณต้องการลิงค์ไปยังคนอื่น ๆ ) คุณสามารถทำได้:
https://github.com/<org>/<repo>/commit/<commit-sha>/<path-to-file>
ตัวอย่างเช่น:
หมายเหตุลิงก์ก่อนหน้าและถัดไปที่ด้านบนขวาที่อนุญาตให้คุณนำทางไฟล์ทั้งหมดในคอมมิท
สิ่งนี้ใช้ได้กับการกระทำที่เฉพาะเจาะจงเท่านั้นไม่ใช่สำหรับการเปรียบเทียบระหว่างเวอร์ชันสองเวอร์ชันใด ๆ
git diff <revision>:foo/ HEAD:foo/กัน