git: yerel repodaki dosya ile başlangıç ​​noktası arasındaki fark


190

Yerel depomda bulunan bir dosya ile dosyadakiler arasındaki farkları bulmak istiyorum origin master.

Ben biliyorum git diff, ancak ben sadece bu belirli bir dosyaya izole etmek istiyorum.

Basitlik için dosyanın ismini söyleyelim ve file1.txtyerel bir dosya path = [local_path]ve orijinde filepath = var [remote-path].

Yazmam gereken git komutu ne olurdu?

EDIT: Girişiniz için hepinize çok teşekkür ederim. Eclipse kullananlar için (ben ve daha önce belirtmiş olmalıydım) sadece sağ tıklayabilirsiniz -> Şununla Karşılaştır -> Şube, Etiket veya Referans -> uygun sürümü seçebilir ve işte gidiyorsunuz.


[Uzak yol] [yerel yol] 'dan farklı mı?
Code-Apprentice

Düzenlemenizi yeni fark ettim. Bir cevap olarak göndermek için çekinmeyin.
Code-Apprentice

"origin master" ne diyorsunuz?

tutulma egit yöntemi iyidir
user1169587

Yanıtlar:


251

Eğer [remote-path]ve [local-path]aynı yapabileceğiniz

$ git fetch origin master
$ git diff origin/master -- [local-path]

Not 1: Yukarıdaki ikinci komut, yerel olarak depolanan uzaktan izleme koluyla karşılaştırılacaktır. Getirme komutu, uzaktan izleme dalını uzak sunucunun içeriğiyle senkronize olacak şekilde güncellemek için gereklidir. Alternatif olarak,

$ git diff master:<path-or-file-name>

Not 2: master yukarıdaki örneklerde herhangi bir şube adıyla değiştirilebilir


15
Ve geçerli dizinse yerel yolu bile atlayabilir.
Tony Wall

19
Benim gibi son derece çaylak için, işte bir örnek:git diff master:README.md -- README.md
fabriciorissetto

24
Aslında, burada daha iyi bir örnek:git diff origin/master -- README.md
JDiMatteo

Bunun git fetch masteryerine kullanamadım git fetch .(köken / usta da işe yaramadı) Ama gerisi iyi çalıştı.
soymak

1
@rob Hatamı ilk gösteren sizsiniz. Olmalı git fetch **origin**.
Code-Apprentice

114

Uzak dosyadan yerel dosyaya giden farkları görüntülemek için:

git diff remotename/branchname:remote/path/file1.txt local/path/file1.txt

Diğer yöndeki farklılıkları görüntülemek için:

git diff HEAD:local/path/file1.txt remotename/branchname:remote/path/file1.txt

Temel olarak, bu gösterimi kullanarak herhangi iki dosyayı herhangi bir yere dağıtabilirsiniz:

git diff ref1:path/to/file1 ref2:path/to/file2

Her zamanki gibi, ref1ve ref2şube isimleri, Uzak ad / BRANCHNAME, olabilir vs. SHA'lar taahhüt


17

Yerel havuzu uzak olanla karşılaştırmak için aşağıdaki sözdizimini kullanın:

git diff @{upstream}

2

Bunun için bir bash senaryosu yazdım:

#set -x 
branchname=`git branch | grep -F '*' |  awk '{print $2}'`
echo $branchname
git fetch origin ${branchname}
for file in `git status | awk '{if ($1 == "modified:") print $2;}'`
do
echo "PLEASE CHECK OUT GIT DIFF FOR "$file 
git difftool  FETCH_HEAD $file ;
done

Yukarıdaki komut dosyasında, uzak ana dalı (ana dalı HERHANGİ bir dalı gerekli değil) FETCH_HEADgetiriyorum, sonra sadece değiştirilmiş dosyamın bir listesini yapıyorum ve değiştirilmiş dosyaları karşılaştırıyorum git difftool.

difftoolGit tarafından desteklenen birçok kişi var, Meld Diff Vieweriyi GUI karşılaştırması için yapılandırdım .
Yukarıdaki komut dosyasından, untrack-->staged-->commituzak ekiple gereksiz çözümleme birleştirme çakışmasını önlemek veya yeni yerel şube yapmak ve ana dalı karşılaştırmak ve birleştirmek için bana yardımcı olan git aşamalarını takip etmeden önce, aynı dosyadaki diğer takımlar tarafından yapılan değişiklikleri önceden biliyordum .


1

Birkaç çözüm denedim ama böyle kolay bir şey (yerel klasördesiniz):

#!/bin/bash
git fetch

var_local=`cat .git/refs/heads/master`
var_remote=`git log origin/master -1 | head -n1 | cut -d" " -f2`

if [ "$var_remote" = "$var_local" ]; then
    echo "Strings are equal." #1
else
    echo "Strings are not equal." #0 if you want
fi

Sonra yerel git ve uzak git son taahhüt numarası karşılaştırdı ....


0

Yerel ve uzaktan kumandadaki olası farklı bir yoldan bahseden orijinal sorunun tam cevabı aşağıdadır

  1. git fetch origin
  2. git diff master -- [local-path] origin/master -- [remote-path]

Yerel yolun docs / file1.txt ve uzak yolun docs2 / file1.txt olduğunu varsayarsak, git diff master -- docs/file1.txt origin/master -- docs2/file1.txt

Bu GitHub yardım sayfasından uyarlanmıştır burada ve Kod-Çırak cevap yukarıdaki

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.