2014-01-13 6 views
114

Ich möchte die Unterschiede zwischen einer Datei, die ich in meinem lokalen Repo vs im Ursprungs-Master ist.Git: Diff zwischen Datei in lokalen Repo und Herkunft

Ich weiß, dass es git diff gibt, aber ich möchte es nur auf diese eine Datei isolieren.

Der Einfachheit halber lässt sich sagen, dass die Dateien den Namen file1.txt haben und einen lokalen Dateipfad = [local_path] und im Ursprung filepath = [remote-path] hat.

Was wäre der Git-Befehl, den ich eingeben muss?

EDIT: Vielen Dank für Ihre Eingabe, es war sehr aufschlussreich. Für diejenigen, die Eclipse verwenden (was ich bin und ich sollte früher gesagt haben) Ich habe gerade herausgefunden, dass Sie einfach mit der rechten Maustaste -> Vergleichen mit -> Branch, Tag oder Referenz -> wählen Sie die entsprechende Version und los geht's.

+0

Unterscheidet sich [remote-path] von [local-path]? –

+0

Ich habe gerade Ihre Bearbeitung bemerkt. Fühlen Sie sich frei, es als Antwort zu posten. –

Antwort

141

Wenn [remote-path] und [local-path] gleich sind, können Sie

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

Anmerkung 1 tun: Der zweite Befehl oben gegen den Willen vergleichen lokal gespeicherter Remote-Tracking-Zweig. Der Abrufbefehl ist erforderlich, um den Remote-Überwachungszweig so zu aktualisieren, dass er mit dem Inhalt des Remote-Servers synchronisiert ist. Alternativ können Sie nur tun

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

Anmerkung 2:master kann in den obigen Beispielen mit jedem Zweignamen

+10

Und kann den lokalen Pfad sogar weglassen, wenn das das aktuelle Verzeichnis ist. –

+9

Für die extrem noob wie mich, hier ist ein Beispiel: 'git diff Master: README.md - README.md' – fabriciorissetto

+8

Eigentlich ist hier ein besseres Beispiel: 'git diff origin/master - README.md' – JDiMatteo

86

Um die Unterschiede gehen aus der Remote-Datei auf die lokale Datei anzuzeigen:

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

die Unterschiede in der anderen Richtung an:

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

Grundsätzlich können Sie zwei beliebige Dateien überall diff diese Schreibweise:

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

Wie üblich ref1 und ref2 könnte Zweignamen, remote/branch sein, verpflichten SHAs usw.

2

für das schrieben einen Bash-Skript

#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 

in obiger Skript ersetzt werden Ich hole Remote-Haupt-Zweig (nicht notwendig, seine Master-Zweig Any-Zweig) zu FETCH_HEAD sie machen nur eine Liste meiner modifizierten Datei und vergleichen Sie modifizierte Dateien mit git difftool

hier viele von git unterstützte difftools, konfiguriere ich 'Meld Diff Viewer' für einen guten GUI Vergleich. Von oben Skript habe ich Vorkenntnisse, was Änderungen von anderen Teams in der gleichen Datei gemacht, bevor ich folgen Git Stufen untrack -> gestaffelt -> commit, die mir helfen, unnötige Konflikte zu vermeiden Zusammenführung Konflikt mit Remote-Team oder neue lokale Zweig und Vergleichen und Zusammenführen auf Hauptzweig.

Verwandte Themen