git แตกต่างกันระหว่างสองไฟล์ที่แตกต่างกัน


112

ในHEAD(คอมมิตล่าสุด) ฉันมีไฟล์ชื่อfoo. ในโครงสร้างการทำงานปัจจุบันของฉันฉันเปลี่ยนชื่อเป็นbarและแก้ไขด้วย

ผมต้องการที่จะgit diff fooอยู่ในHEADและbarในต้นไม้การทำงานปัจจุบันของฉัน


65
ฉันคิดว่าคำถามนี้ (จากชื่อเรื่อง) อาจเกี่ยวกับการใช้ git diff กับสองไฟล์ที่ไม่จำเป็นต้องอยู่ใน repo ฉันพบว่าแฟgit diff --no-index --word-diff old_file.txt new_file.txtล็ก--no-index มีไว้สำหรับสิ่งนั้นเช่น(--word-diff เน้นการเปลี่ยนแปลงทีละคำไม่ใช่แค่บรรทัดซึ่งเป็นประโยชน์อย่างยิ่งสำหรับข้อความขนาดยาว)
แพ็ต

คำตอบ:


139

ระบุเส้นทางอย่างชัดเจน:

git diff HEAD:full/path/to/foo full/path/to/bar

ตรวจสอบ--find-renamesตัวเลือกในเอกสารgit-diff

เครดิต: twaggs .


10
ฉันต้องการพูดถึงว่าคุณสามารถเปรียบเทียบไฟล์สองไฟล์โดยใช้git diff <path> <path>แม้ว่าไฟล์เหล่านั้นจะไม่ได้อยู่ในที่เก็บ git ก็ตาม
mitenka

1
@mitenka ฉันคิดว่าไม่ถูกต้อง ถ้าคุณดูที่คุณจะเห็นว่ารูปแบบเดียวที่ได้รับการสนับสนุนสำหรับแฟ้มที่สองคือgit diff --help จับคู่เฉพาะรูปแบบการคอมมิตไม่ใช่ไฟล์ git diff [<options>] --no-index [--] <path> <path>git diff a b
Doug

@ Doug นี่คือคำพูดจากคำสั่ง help ที่คุณกล่าวถึงgit-scm.com/docs/git-diff : แสดง [... ] การเปลี่ยนแปลงระหว่างสองไฟล์บนดิสก์
mitenka

@mitenka ความช่วยเหลือกล่าวว่าเว้นแต่คุณจะใช้ '- ไม่มีดัชนี' มันจะไม่เปรียบเทียบไฟล์ ความคิดเห็นของคุณควรเป็นคำตอบแยกต่างหาก ไม่เป็นความจริงและไม่เกี่ยวข้องกับคำตอบนี้
Doug

1
@ คุณดั๊กขอบคุณสำหรับความคิดเห็น นี่คือคำพูดจากความช่วยเหลือที่คุณอ้างอิงถึง: คุณสามารถละเว้น--no-indexตัวเลือกเมื่อเรียกใช้คำสั่งในโครงสร้างการทำงานที่ควบคุมโดย Git และอย่างน้อยหนึ่งในเส้นทางที่ชี้นอกโครงสร้างการทำงานหรือเมื่อเรียกใช้คำสั่งนอกโครงสร้างการทำงานที่ควบคุมโดย Git .
mitenka

81

ฉันเชื่อว่าการใช้--no-indexคือสิ่งที่คุณกำลังมองหา:

git diff [<options>] --no-index [--] <path> <path>

ตามที่ระบุไว้ในคู่มือคอมไพล์:

แบบฟอร์มนี้คือการเปรียบเทียบสองเส้นทางที่กำหนดบนระบบไฟล์ คุณสามารถ ละเว้น--no-indexตัวเลือกเมื่อเรียกใช้คำสั่งในต้นไม้ทำงานควบคุมโดย Git และอย่างน้อยหนึ่งในจุดเส้นทางนอกต้นทำงานหรือเมื่อใช้คำสั่งนอกต้นไม้ทำงานควบคุมโดย Git


1
เรานี่เป็นคำตอบที่มีประโยชน์อย่างแน่นอน แต่ OP ระบุเฉพาะไฟล์อยู่ใน HEAD ซึ่งหมายความว่าอยู่ในดัชนีคอมไพล์ คำตอบที่ได้รับการยอมรับสามารถตอบคำถามได้โดยตรง นอกจากนี้คำตอบที่ยอมรับก็มีการเริ่มต้น 6 ปี;)
Michael Delgado

3
สิ่งนี้อาจไม่ได้ช่วย OP แต่เป็นสิ่งที่ฉันกำลังมองหา
thislooksfun

1
สิ่งนี้จะตอบคำถามที่โพสต์โดยชื่อเรื่องหากคุณกำลังมองหาสิ่งนี้บนเว็บ
Merlin

ขอบคุณที่ตอบชื่อ ... นี่คือเหตุผลที่ฉันมาที่นี่
grek40

ฉันมีความสุขที่ช่วยได้
mh sattarian

3

หากคุณใช้ tortoise git คุณสามารถคลิกขวาที่ไฟล์และคอมไพล์โดย: คลิกขวาที่ไฟล์แรกและผ่านเมนูย่อยของ tortoisegit ให้เลือก "Diff later" จากนั้นในไฟล์ที่สองคุณสามารถคลิกขวาที่ไฟล์นี้ได้ ไปที่เมนูย่อย tortoisegit จากนั้นเลือก "Diff with yourfilenamehere.txt"


-12

การใช้ PhpStorm ฉันเพียงแค่คัดลอกรหัสการกระทำก่อนหน้าและเปรียบเทียบกับเวอร์ชันปัจจุบันโดยใช้เครื่องมือ "เปรียบเทียบกับคลิปบอร์ด" ในตัว


5
PhpStorm เป็น IDE เชิงพาณิชย์ คำถามนี้เกี่ยวกับวิธีการทำสิ่งนี้ภายใน git cli เองโดยไม่มีข้อสันนิษฐานเกี่ยวกับซอฟต์แวร์เพิ่มเติม
Charles Taylor
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.