2013-07-16 10 views
102

Angenommen, ich habe ein Repository geklont und Dateien geändert. Ich weiß, dass, wenn ich lokale nicht festgeschriebene Änderungen habe, ich ein diff wie folgt git diff test.txt tun kann und es mir den Unterschied zwischen dem aktuellen lokalen HEAD und den geänderten, nicht festgeschriebenen Änderungen in der Datei zeigen wird. Wenn ich begehen jene Änderungen, die ich gegen die Original-Repository unter Verwendung git diff master origin/masterWie man zwischen lokalen nicht festgeschriebenen Änderungen und Ursprung unterscheidet

Aber ist es eine Möglichkeit, von diff'ing die lokalen Änderungen mit der Original-Repository auf dem Server vor begeht lokal diff kann? Ich habe verschiedene Permutationen von git diff --cached master origin/master ohne Glück versucht.

+0

ich wissen wollte, inszeniert, nicht verpflichtet Veränderungen zu sehen, wie viel meine Datei aus dem letzten festgeschriebenen Version auf meinem lokalen geändert hat. Die Antwort auf meine Frage war diese Frage. Vielen Dank! –

Antwort

98

Da das Remote-Repository über git fetch zwischengespeichert wurde, sollte es möglich sein, diese Commits zu vergleichen. Versuchen Sie Folgendes:

$ git fetch origin 
$ git diff origin/master 
+4

Ah, ausgezeichnet. Der Schlüssel war, den Meister zu verlassen. Ich hatte eine Kombination ausprobiert, bei der ich vorher schon abgeholt hatte, aber als ich 'diff Master/Herkunft' gemacht habe, war es immer noch ein Vergleich mit der Committed Version (offensichtlich im Nachhinein). Wenn der Master jedoch weggelassen wird, werden lokale Änderungen mit der abgerufenen Version verglichen. – Chaitanya

+0

@Chaitanya Gut, ich könnte helfen. Tatsächlich finde ich die verschiedenen Stile, die Git ein wenig irritiert: einmal muss man "origin master" und irgendwo anders "origin/master" schreiben. Es gibt noch viel zu tun, IMHO. – JJD

+0

Das scheint nicht zu funktionieren: 'git diff origin/master' gibt zurück' fatal: mehrdeutiges Argument 'origin/master': unbekannte Revision oder Pfad nicht im Arbeitsbaum. 'Master existiert aber auf Ursprung, zB 'git fetch Origin Master 'funktioniert gut, – mikemaccana

27

Ich weiß, es ist keine Antwort auf die genaue Frage gestellt, aber ich fand diese Frage sucht eine Datei in einem Zweig und eine lokale uncommitted Datei diff und ich dachte, ich würde

teilen

Syntax:

git diff <commit-ish>:./ -- <path> 

Beispiele:

git diff origin/master:./ -- README.md 
git diff HEAD^:./ -- README.md 
git diff [email protected]{0}:./ -- README.md 
git diff 1A2B3C4D:./ -- README.md 

(Danke Eric Boehs für einen Weg, um die Dateinamen nicht zweimal eingeben muß)

+0

Ich mag die allgemeine Lösung besser als die enge, spezifische oben.Mind Sharing wo hast du das gefunden? – fbicknel

+0

Ich kann nicht scheinen, die Dokumentation über die Details von 'commit-ish' und Doppelpunkt-Trennzeichen zu finden. Die Dokumente auf [git-diff] (http://git-scm.com/docs/git-diff) scheinen es nicht zu erwähnen. Ich habe es so lange benutzt, dass ich mich nicht mehr erinnere, wo ich es zuerst gefunden habe. Wahrscheinlich andere Leute Beispiele auf andere Befehle und ich experimentierte gerade mit 'git-diff. Ich fürchte, [eine andere Antwort auf 'commit-ish'] (http://stackoverflow.com/a/23303550/761771) ist das Beste, was ich mir im Moment vorstellen kann. – Nate

+1

Eine nette Ergänzung dazu ist 'git diff master: ./ - README.md'. Auf diese Weise müssen Sie nicht zweimal 'README.md' eingeben und Sie können es einfacher einem Alias ​​hinzufügen. –

5

Wenn Sie Dateien vergleichen wollen visuell können Sie:

git difftool 

Es wird Ihr diff App automatisch für jede geänderte Datei starten .

PS: Wenn Sie keine diff App festgelegt haben, können Sie es wie im Beispiel unten tun (ich benutze Winmerge):

git config --global merge.tool winmerge 
git config --replace --global mergetool.winmerge.cmd "\"C:\Program Files (x86)\WinMerge\WinMergeU.exe\" -e -u -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"" 
git config --global mergetool.prompt false 
+0

wird diese Änderung sofort wirksam? –

+0

Ich bin nur neugierig, wie ist das mit der Frage verbunden? Würde nicht gitt difftool einfach die lokalen Änderungen mit dem Master vergleichen? Das OP will es jedoch zwischen den lokalen Änderungen und dem Remote-Master. – infoclogged

15

nicht inszeniert zu sehen (nicht hinzugefügt) Änderungen vorhandene Dateien

git diff

Beachten Sie, dass dies keine neuen Dateien nicht verfolgen. Um

git diff --cached

Verwandte Themen