2015-05-04 16 views
5

Supponiamo per un momento di avere un file in un repository chiamato LICENSE.txt. Il contenuto appare come segue:Come confrontare la copia di lavoro, la copia di staging e la copia impegnata di un file usando git

Copyright 2014 MyCompany. All Rights Reserved. 

Fin dalla sua 2015 ho cambiato l'anno quindi il suo 2015:

Copyright 2015 MyCompany. All Rights Reserved. 

E poi messo in scena il file

git add LICENSE.txt 

Essere un po 'distratto, ho fatto un'altra modifica a LICENSE.txt per riflettere che un'altra organizzazione condivide il copyright.

Copyright 2015 MyCompany and Affiliates. All Rights Reserved. 
Copyright 2015 Other Company. All Rights Reserved. 

sono in grado di vedere la differenza tra la mia copia di lavoro e messo in scena copia eseguendo

git diff 

E io sono in grado di vedere la differenza tra la copia messa in scena e la copia impegnato eseguendo

git diff --cached 

Come si confronta la copia impegnata (quella senza la modifica dell'anno) con la copia di lavoro (quella con il copyright aggiuntivo)?

Questo è puramente un esempio. Ci sono casi molto più complessi in cui ho avuto la necessità di confrontare ciò che ho messo in scena con le modifiche apportate successivamente al file. Il confronto tra il contenuto della copia di lavoro e la copia in scena determinerà se sostituire la copia in scena o meno.

Sto eseguendo git 1.9.5 su Windows Server 2012 R2.

+0

'git diff' non fa quello che rivendichi, vedi la risposta accettata. Puoi modificare il tuo post in modo che i futuri lettori non siano fuorviati? –

+0

Ho apportato la modifica.La confusione deriva dal fatto che quando non hai messo in scena nessuna modifica, ma hai apportato una modifica alla tua copia di lavoro, 'git diff' mostrerà la differenza tra la copia di lavoro e la copia impegnata. – bloudraak

+0

Quando non sono state apportate modifiche, 'git diff' si comporta come quando sono state apportate modifiche. Ma entrambi i diff sono uguali. –

risposta

14

Come si confronta la copia di staging (quella con la modifica dell'anno) con la copia di lavoro.
[...] ho avuto la necessità di confrontare ciò che ho messo in scena con i cambiamenti che successivamente apportate al file

Che sarebbe ancora git diff.

(modifica di OP:. Come faccio a confrontare il commesso copia (quello con il cambiamento di anno) con il lavoro di copia

Allora sarebbe git diff HEAD)

http://images.abizern.org.s3.amazonaws.com/365git/Feb11/Git%20Diff%202.png

(365git: Getting a diff between the working tree and other commits)

Se stai cercando qualcosa di diverso da git diff e diff --cached, che ti lascia con:

git diff HEAD 

Cioè: la differenza tra la versione già impegnati e l'albero di lavoro.

+0

Hai coperto tutti gli scenari che stavo cercando con un'illustrazione molto chiara. Grazie per aver dedicato del tempo. – bloudraak

+0

Si noti che se non è stata eseguita alcuna modifica, 'git diff' mostrerà la differenza tra la copia impegnata e la copia di lavoro. – bloudraak

+0

@bloudraak true: HEAD e index sarebbero identici prima del primo 'git add'. – VonC

Problemi correlati