2013-07-16 16 views
102

Diciamo che ho clonato un repository e ho iniziato a modificare i file. So che se ho modifiche locali senza commit, posso fare un diff come segue git diff test.txt e mi mostrerà la differenza tra l'attuale HEAD locale e le modifiche non modificate nel file. Se commetto tali modifiche posso diff contro il repository originale utilizzando git diff master origin/masterCome diff tra le modifiche e le origini locali senza commit

Ma esiste un modo di diff'ing le modifiche locali con il repository originale sul server prima commettere a livello locale? Ho provato varie permutazioni di git diff --cached master origin/master senza fortuna.

+0

Volevo sapere quanto il mio file è stato modificato dall'ultima versione impegnato sul mio locale. La risposta alla mia domanda era questa domanda. Grazie! –

risposta

98

Dato che il repository remoto è stato memorizzato nella cache tramite git fetch, dovrebbe essere possibile confrontarlo con questi commit. Provare quanto segue:

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

Ah, eccellente. La chiave era lasciare il master. Avevo provato una combinazione dove stavo facendo un recupero prima, ma quando ho fatto 'git diff master origin/master' si stava ancora confrontando con la versione impegnata (ovvio in retrospettiva). Lasciare fuori il master ora confronta le modifiche locali con la versione scaricata. – Chaitanya

+0

@Chaitanya Buona potrei aiutare. In realtà trovo che i diversi stili di Git siano un po 'irritanti: una volta devi scrivere "origine master" e da qualche altra parte "origine/master". C'è ancora del lavoro da fare, IMHO. – JJD

+0

Questo non sembra funzionare: 'git diff origin/master' restituisce ' fatale: argomento ambiguo 'origine/master': revisione sconosciuta o percorso non presente nell'albero di lavoro. Il master esiste tuttavia sull'origine, ad es. 'Git fetch Origin Master' funziona bene, – mikemaccana

27

io so che non è una risposta alla precisa domanda posta, ma ho trovato questa domanda cercando di diff un file in un ramo e un file uncommitted locale e ho pensato che avrei condiviso

Sintassi:

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

Esempi:

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

(Grazie Eric Boehs di un modo per non dover digitare il nome del file per due volte)

+0

Mi piace la soluzione generale meglio di quella stretta e specifica sopra.La mente condivide dove l'hai trovato? – fbicknel

+0

Non riesco a trovare la documentazione sui dettagli di 'commit-ish' e colon separator. I documenti su [git-diff] (http://git-scm.com/docs/git-diff) non sembrano menzionarlo. L'ho usato per così tanto tempo che non ricordo dove l'ho trovato. Probabilmente altri esempi di persone su altri comandi e ho appena sperimentato con 'git-diff'. Temo che [un'altra risposta su 'commit-ish'] (http://stackoverflow.com/a/23303550/761771) sia la migliore che riesca a trovare al momento. – Nate

+1

Una bella aggiunta a questo è 'git diff master: ./ - README.md'. In questo modo non devi digitare 'README.md' due volte e puoi aggiungerlo a un alias più facilmente. –

5

Se si desidera confrontare visivamente i file è possibile utilizzare:

git difftool 

si avvierà automaticamente il diff app per ogni file modificato .

PS: Se non è stato impostato un app diff, si può fare come nel seguente esempio (io uso 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

questa modifica ha effetto immediato? –

+0

Sono solo curioso, com'è collegato alla domanda? Non sarebbe difftool basta confrontare le modifiche locali con il master? Tuttavia, l'OP lo desidera tra le modifiche locali e il master remoto. – infoclogged

15

Per vedere non messo in scena (non aggiunti) modifiche i file esistenti

git diff

Si noti che questo non tiene nuovi file. per vedere in scena, i cambiamenti non commesso

git diff --cached

Problemi correlati