ฉันมี repo พร้อมไฟล์fooในสาขาหลัก fooผมเปลี่ยนบาร์สาขาและทำให้การเปลี่ยนแปลงบางอย่าง ตอนนี้ฉันจะเรียกใช้git diffระหว่างสำเนานี้ (ซึ่งยังไม่ได้ทำ) และสำเนาของสาขาหลักได้อย่างไร
ฉันมี repo พร้อมไฟล์fooในสาขาหลัก fooผมเปลี่ยนบาร์สาขาและทำให้การเปลี่ยนแปลงบางอย่าง ตอนนี้ฉันจะเรียกใช้git diffระหว่างสำเนานี้ (ซึ่งยังไม่ได้ทำ) และสำเนาของสาขาหลักได้อย่างไร
คำตอบ:
งานต่อไปนี้สำหรับฉัน:
git diff master:foo foo
ในอดีตอาจเคยเป็น:
git diff foo master:foo
--เพื่อแยกพารามิเตอร์จากอาร์กิวเมนต์ของเส้นทางหรือไม่ git diff -- master:foo foo
git diff -- master:foo fooใช้งานไม่ได้ - ดูเหมือนว่าจะถือว่า arg master:fooเป็นชื่อไฟล์ที่ไม่มีอยู่ (และไม่สนใจ) แทนที่จะเป็นไฟล์ในสาขา ลองสลับ 2 args ล่าสุด - หากใช้งานได้การเปรียบเทียบ diff ควรกลับด้าน แต่เอาต์พุตไม่เปลี่ยนแปลง
git diff master:foo fooแต่ไม่กลับกัน ฉันก็ไม่เข้าใจเหมือนกัน ด้วย git 1.7.9.5 / Ubuntu 12.04 อย่างน้อยฉันก็สามารถทำได้git diff -R master:foo fooเพื่อให้ได้ diff ที่ฉันต้องการจริงๆ เมื่อฉันพยายามที่มี msysgit 1.9.4 / Windows 7 x64 fatal: unable to read 0000000000000000000000000000000000000000ฉันได้รับ โดยไม่ต้อง-Rฉันได้รับข้อความแสดงข้อผิดพลาดเช่นเดียวกับคุณกับคอมไพล์ 1.7.9.5 แต่ด้วย 1.9.4 fatal: master:foo: no such path in the working treeฉันได้รับ
คุณกำลังพยายามเปรียบเทียบแผนผังการทำงานกับชื่อสาขาเฉพาะดังนั้นคุณต้องการสิ่งนี้:
git diff master -- foo
ซึ่งมาจาก git-diff รูปแบบนี้ (ดู manpage git-diff)
git diff [--options] <commit> [--] [<path>...]
This form is to view the changes you have in your working tree
relative to the named <commit>. You can use HEAD to compare it with
the latest commit, or a branch name to compare with the tip of a
different branch.
FYI, นอกจากนี้ยังมีตัวเลือก--cached(aka --staged) สำหรับการดูความแตกต่างของสิ่งที่คุณจัดฉากมากกว่าทุกอย่างในแผนผังการทำงานของคุณ:
git diff [--options] --cached [<commit>] [--] [<path>...]
This form is to view the changes you staged for the next commit
relative to the named <commit>.
...
--staged is a synonym of --cached.
นอกจากนี้: git diff master..feature foo
เนื่องจากgit diff foo master:fooใช้งานไม่ได้กับไดเรกทอรีสำหรับฉัน
git diff branch1:foo master:foo
git diff mybranch master -- file
ควรทำงานเช่นกัน
git diff deployment master -- fileและgit diff master deployment -- fileมีการทำงานตามที่คาดไว้กับ 2 สาขา
หากต้องการดูการเปลี่ยนแปลงในท้องถิ่นเปรียบเทียบกับสาขาปัจจุบันของคุณ
git diff .
หากต้องการดูการเปลี่ยนแปลงในท้องถิ่นเปรียบเทียบกับสาขาอื่นที่มีอยู่
git diff <branch-name> .
หากต้องการดูการเปลี่ยนแปลงของไฟล์เฉพาะ
git diff <branch-name> -- <file-path>
ตรวจสอบให้แน่ใจว่าคุณgit fetchเริ่มต้น
git diffฉันคิดถึงstackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/