Git: Farklı dallardaki iki farklı dosyayı nasıl ayırt edebilirim?


170

Farklı dallarda iki farklı dosyam var. Onları tek bir komutta nasıl dağıtabilirim?

Gibi bir şey

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

Diğer dosyayı kontrol, fark ve geri yükleme, ama bu oldukça kirli bir çözüm.


3
@EugenKonkov Bu bir kopya değil çünkü bu soru farklı dallardaki farklı dosyaları nasıl dağıtacağınızı soruyor . Bağlantılı soru sadece aynı dosyanın farklı dallarda nasıl dağıtılacağını sorar .
Steve

Yanıtlar:


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

Göreli yolları da kullanabilirsiniz:

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

9
Müthiş! Ben kesinlikle bunu çıkartamadım git help diff. Bu arada, bunların iki nokta üst üste işareti olmak zorunda değiller, ancak herhangi bir taahhüt başvurusu olabilirler (örneğin SHA-1 değerleri).
Steve Jorgensen

3
Önemli Not: Windows'ta Git, tam itemspec öğesinin bir unix adı olmasını gerektirir. ie branch1: full \ path \ to \ foo.txt başarısız olurken, branch1: full / path / to / foo.txt düzgün çalışıyor ve full \ path \ to \ foo.txt (şube yok)
Eris

kullanın git difftoolve bırakın branch2:ve bu, geçerli çalışma ağacındaki bir dosyayı düzenlemenize olanak tanır (değişiklikleri getirmek için branch1)
gMale

Git sürüm 1.8.3.1 ile linux üzerinde çalıştı, sadece göreli yollara izin verildi.
Sola Yang

21

Sidenote: tam yollara gerek yoktur, ./göreli yollar için başlayabilirsiniz . Bazen kullanışlı olabilir.

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

2

İki farklı daldan dosyaları karşılaştırmanın birçok yolu vardır. Örneğin:

  • Ad aynı veya farklıysa:

     git diff branch1:file branch2:file
    

    Misal:

     git diff branch1:full/path/to/foo.txt branch2:full/path/to/foo-another.txt
    
  • Yalnızca ad aynı ise ve geçerli çalışma dizininizi bir dalla karşılaştırmak istiyorsanız:

    git diff ..someBranch path/to/file
    

    Misal:

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

    Bu örnekte, dosyayı gerçek dalınızdan ana daldaki dosyayla karşılaştırıyorsunuz.

Bu yanıtı kontrol edebilirsiniz:

Git'teki iki farklı şubeden bir dosyayı karşılaştırma


1

Konu dışı cevap - yorumlara bakın

Sadece eklemek için çok basit bir sözdizimi buluyorum:

git diff <branch1> <branch2> <filepath>

Ayrıca aşağıdaki gibi göreceli referanslarla çalışır:

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

1
OP özellikle "farklı dosyalar" istedi. Cevabınız aynı dosyayı iki farklı dalda karşılaştırmakla ilgilidir.
Etienne Miret

@EtienneMiret Kesinlikle haklısın, bu önemli noktayı kaçırdım. Konu dışı cevap.
RomainValeri

-1

git diffUygulanacak bir başlangıç ​​ve aralık belirleyebilirsiniz. Aralık, ..gösterimle belirtilir .

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

Bu sadece aynı dosyayı iki dalda karşılaştırıyor; soru iki daldaki iki farklı dosya hakkındaydı.
Piran
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.