Git: วิธีการแตกต่างกันสองไฟล์ที่แตกต่างกันในสาขาที่แตกต่างกันอย่างไร


170

ฉันมีสองไฟล์ที่แตกต่างกันในสาขาที่แตกต่างกัน ฉันจะกระจายพวกมันในคำสั่งเดียวได้อย่างไร

สิ่งที่ต้องการ

# git diff branch1/foo.txt branch2/foo-another.txt

ฉันสามารถตรวจสอบไฟล์อื่นแตกต่างและเรียกคืน แต่นั่นเป็นวิธีที่ค่อนข้างสกปรก


3
@EugenKonkov มันไม่ซ้ำกันเพราะคำถามนี้ถามว่าจะแตกต่างไฟล์ในสาขาที่แตกต่างกันอย่างไร คำถามที่เชื่อมโยงจะถามวิธีแตกไฟล์เดียวกันในสาขาที่แตกต่างกัน
Steve

คำตอบ:


214
git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt

คุณยังสามารถใช้เส้นทางสัมพัทธ์:

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

9
! น่ากลัว git help diffฉันได้อย่างแน่นอนไม่สามารถที่จะสรุปว่าจาก โดยวิธีการเหล่านั้นไม่จำเป็นต้องเป็นชื่อสาขาข้างหน้าของโคลอน แต่สามารถอ้างอิงประเภทใดกระทำ (เช่นค่า SHA-1)
Steve Jorgensen

3
หมายเหตุสำคัญ: Git บน windows ต้องการไอเท็มเต็มรูปแบบเป็นชื่อ unix ie branch1: full \ path \ to \ foo.txt ล้มเหลวขณะที่ branch1: full / path / to / foo.txt ทำงานได้ดีเช่นเดียวกับ \ path \ to \ foo.txt เต็มรูปแบบ (ไม่มีสาขา)
Eris

ใช้git difftoolแล้วปล่อยbranch2:และที่จะช่วยให้คุณสามารถแก้ไขไฟล์ในbranch1
แผนผัง

ลองใช้ linux กับ git เวอร์ชั่น 1.8.3.1 อนุญาตให้ใช้พา ธ ที่เกี่ยวข้องเท่านั้น
Sola Yang

21

Sidenote: ไม่จำเป็นต้องใช้เส้นทางแบบเต็มคุณสามารถเริ่มต้นด้วย./เส้นทางที่สัมพันธ์กัน บางครั้งมันก็มีประโยชน์

git diff branch1:./relative/path/to/foo.txt branch2:./relative/path/to/foo-another.txt

2

มีหลายวิธีในการเปรียบเทียบไฟล์จากสองสาขาที่แตกต่างกัน ตัวอย่างเช่น:

  • หากชื่อเหมือนหรือแตกต่าง:

     git diff branch1:file branch2:file
    

    ตัวอย่าง:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • เฉพาะในกรณีที่ชื่อนั้นเหมือนกันและคุณต้องการเปรียบเทียบไดเรกทอรีการทำงานปัจจุบันของคุณกับบางสาขา:

    git diff ..someBranch path/to/file
    

    ตัวอย่าง:

    git diff ..branch2 full/path/to/foo.txt
    

    ในตัวอย่างนี้คุณกำลังเปรียบเทียบไฟล์จากสาขาที่แท้จริงของคุณกับไฟล์ในสาขาหลัก

คุณสามารถตรวจสอบคำตอบนี้:

เปรียบเทียบไฟล์จากสองสาขาที่แตกต่างกันใน Git


1

คำตอบนอกหัวข้อ - ดูความคิดเห็น

เพียงเพิ่มมันเพราะฉันพบว่ามันเป็นไวยากรณ์ที่ตรงไปตรงมามาก:

git diff <branch1> <branch2> <filepath>

ทำงานร่วมกับ refs ญาติเช่น:

# compare the previous committed state from HEAD with the state branch1 was 3 commits ago
git diff HEAD^ <branch1>~3 <filepath>

1
OP ขอเฉพาะ "ไฟล์ที่แตกต่าง" คำตอบของคุณเกี่ยวกับการเปรียบเทียบไฟล์เดียวกันในสองสาขาที่แตกต่างกัน
Etienne Miret

@EtienneMiret คุณพูดถูกฉันพลาดจุดสำคัญไปแล้ว คำตอบนอกหัวข้อ
RomainValeri

-1

คุณสามารถระบุจุดเริ่มต้นและช่วงgit diffที่จะใช้กับ ช่วงจะถูกระบุด้วย..เครื่องหมาย

branch1=somebranch
branch2=someotherbranch
git diff ${branch1}..${branch2} -- file_path

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