diff attuale copia di lavoro di un file con copia impegnata di un altro ramo


158

Ho un repository con file foonel ramo master. Sono passato al ramo di barra e ho apportato alcune modifiche foo. Come posso ora eseguire un passaggio git difftra questa copia (che non è ancora impegnata) e la copia del ramo principale?

Risposte:


151

Per me funziona quanto segue:

git diff master:foo foo

In passato, potrebbe essere stato:

git diff foo master:foo


9
Ogni volta che vedo una risposta del tuo riguardo git diff, penso sempre di stackoverflow.com/questions/5256249/git-diff-doesnt-show-enough/...
VonC

@VonC: grazie, è bello sapere che valeva la pena disegnarli :) Per inciso, capisci per caso la stranezza con cui ho aggiornato la mia risposta?
Mark Longair,

2
Hai provato con un --per separare i parametri dagli argomenti del percorso? git diff -- master:foo foo
VonC

1
Su 1.8, git diff -- master:foo foonon funziona - sembra trattare arg master:foocome un nome di file inesistente (e lo ignora) invece di un file in un ramo. Prova a cambiare gli ultimi 2 argomenti: se ha funzionato, il confronto diff dovrebbe essere invertito, ma l'output non cambia.
Kelvin,

9
Per me è il contrario: posso fare git diff master:foo fooma non viceversa. Neanche io lo capisco. Con git 1.7.9.5 / Ubuntu 12.04 posso almeno fare git diff -R master:foo fooper ottenere il diff che voglio davvero. Quando provo che con msysgit 1.9.4 / Windows 7 x64 ottengo fatal: unable to read 0000000000000000000000000000000000000000. Senza -Rricevo lo stesso messaggio di errore di te con git 1.7.9.5, ma con 1.9.4 ottengo fatal: master:foo: no such path in the working tree.
JMM,

100

Stai cercando di confrontare il tuo albero di lavoro con un nome di ramo particolare, quindi vuoi questo:

git diff master -- foo

Che proviene da questa forma di git-diff (vedi la manpage git-diff)

   git diff [--options] <commit> [--] [<path>...]
       This form is to view the changes you have in your working tree
       relative to the named <commit>. You can use HEAD to compare it with
       the latest commit, or a branch name to compare with the tip of a
       different branch.

Cordiali saluti, c'è anche un'opzione --cached(aka --staged) per visualizzare il diff di ciò che hai messo in scena, piuttosto che tutto nel tuo albero di lavoro:

   git diff [--options] --cached [<commit>] [--] [<path>...]
       This form is to view the changes you staged for the next commit
       relative to the named <commit>.
       ...
       --staged is a synonym of --cached.

2
Grazie. Non ho idea del perché, ma solo questa risposta ha funzionato per me con git 1.8.1 in Linux.
apertura il

Eccellente grazie. Mi sono impiccato a voler includere il nome del mio ramo corrente nel comando diff, ma vedo che non è necessario.
yoyo

Questo ha funzionato per me alcuni mesi fa, ma non sembra esserlo ora. Attualmente sono alla versione 2.7.4 di Git (Apple Git-66); Non so cosa avevo prima.
hBrent,

@hBrent funziona ancora per me su OSX 10.11 con git 2.7.3. Ecco un rapido repository di esempio con le istruzioni se è utile: github.com/jordan-brough/git-diff-test
Jordan Brough

Grazie @JordanBrough.
hBrent,

14

Anche: git diff master..feature foo

Dal momento git diff foo master:fooche non funziona su directory per me.


Neanche io. È una cosa di Windows?
Scott Stafford,

@ScottStafford Sono su Ubuntu, quindi no, non sembra che sia solo una cosa di Windows.
ArtBIT,

Funziona per me purché do esplicitamente entrambi i nomi dei rami (windows) git diff branch1:foo master:foo
Meep

12
git difftool tag/branch filename

Questa è l'unica risposta che ha funzionato per me per il confronto tra una copia di lavoro locale di un file e quella versione del file in un repository remoto (non "origine"). Grazie, Adir e Baz
Mouse

git difftoolnon ha alcuna -vopzione secondo i documenti git-scm.com/docs/git-difftool . Volevi dire -y?
ks1322

10
git diff mybranch master -- file

dovrebbe anche funzionare


4
Funziona solo con i file impegnati in mybranch, non con l'attuale copia di lavoro del file.
yoyo

cosa significa "-" sopra
Pushparaj

Ciò consente il confronto in entrambe le direzioni: git diff deployment master -- filee git diff master deployment -- filefunzionano come previsto con 2 rami qualsiasi .
viktorkho,

0

Per vedere le modifiche locali confrontare con il tuo ramo attuale

git diff .

Per vedere le modifiche locali confrontate con qualsiasi altra filiale esistente

git diff <branch-name> .

Per vedere le modifiche di un determinato file

git diff <branch-name> -- <file-path>

Assicurati di correre git fetchall'inizio.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.