Come posso vedere cosa è cambiato in un file prima di impegnarmi in git?


351

Ho notato che mentre lavoro su uno o due biglietti, se mi allontano, non sono sicuro di cosa ho lavorato, cosa è cambiato, eccetera.

C'è un modo per vedere le modifiche apportate per un determinato file prima di git add e quindi git commit?

Risposte:


525

Stai cercando git diff. A seconda della situazione esatta, ci sono tre modi utili per usarlo:

# show differences between index and working tree
# that is, changes you haven't staged to commit
git diff [filename]
# show differences between current commit and index
# that is, what you're about to commit
# --staged does exactly the same thing, use what you like
git diff --cached [filename]
# show differences between current commit and working tree
git diff HEAD [filename]

Funzionerà in modo ricorsivo su directory e, se non viene fornito alcun percorso, mostra tutte le modifiche.


1
@ sveilleux2 No, basta eseguire git diff senza argomenti - come dice l'ultima frase della risposta, se non viene fornito alcun percorso, mostra tutte le modifiche. (Le parentesi quadre [filename]indicano un argomento facoltativo.) Con la *stai facendo in modo che la shell elenchi tutti i file, quindi se sei in una sottodirectory otterrai solo cose in quella sottodirectory (non l'intero repository) e tu ' mi mancheranno le modifiche nei file nascosti.
Cascabel,

# mostra le differenze tra commit corrente e indice # cioè, cosa stai per commettere git diff --cached [nome file] Non intendi: # mostra le differenze tra commit corrente e indice # cioè, di cosa ti occupi a spingere ? git diff --cached [nome file]
ofarooq

3
Per vedere le differenze fatte dopo aver aggiunto un file (cioè, dopo "git add"), fai "git diff --staged [nome file]"
Sidtharthan,

Oh, perché è così complicato ?! E se avessimo un paio di dozzine di file? .. Ci lamentiamo solo dell'interfaccia git ... Sì, sembra, git add -pè un'alternativa per ispezionare tutti i file.
Kirby,

@Jefromi - ti preghiamo di considerare di aggiungere la git diff --staged [filename]tua risposta principale in quanto questa è una situazione più spesso necessaria.
Lazzaro Thurston,



8

Per me git add -pè il modo più utile (e inteso penso dagli sviluppatori git?) Di rivedere tutte le modifiche non messe in scena (mostra la differenza per ogni file), scegliere una buona serie di modifiche che dovrebbero andare con un commit, quindi quando hai messo in scena tutti quelli, quindi utilizzare git commite ripetere per il prossimo commit. Quindi puoi fare in modo che ogni commit sia un insieme utile o significativo di modifiche anche se sono avvenute in vari file. Suggerirei anche di creare un nuovo ramo per ogni ticket o attività simile e passare da uno all'altro usando checkout(magari usando git stashse non vuoi impegnarti prima di cambiare), anche se se stai facendo molte modifiche rapide questo potrebbe essere un problema. Non dimenticare di unirti spesso.


Quindi invece di git aggiungi il nome del file usa git add -p?
Timothy T.,

1
git add -p è una combinazione di stadiazione, vedendo i cambiamenti che puoi mettere in scena e selezionandoli uno per uno in maniera interattiva. Vedi Commit solo parte di un file in Git per ulteriori informazioni su git add -p.
Angelos Asonitis,

5

git diff

Mostra i cambiamenti tra l'albero di lavoro e l'indice o un albero, i cambiamenti tra l'indice e un albero, i cambiamenti tra due alberi o i cambiamenti tra due file sul disco.


La citazione è un po 'troppo - per impostazione predefinita, esegue il primo confronto: tra l'albero di lavoro e l'indice.
Cascabel,

4

Ricorda, stai apportando modifiche , non file.

Per questo motivo, è molto raro che io non usi git add -p(o l'equivalente magit) per aggiungere le mie modifiche.


2
git NON affronta i cambiamenti - cercare di pensarci come se fosse la fonte primaria di confusione ed errori. git si occupa di istantanee.
Chris Dodd,

3
git diff <path>/filename

percorso può essere completo percorso di sistema fino al file o
se ci si trova nel progetto si incolla il percorso del file modificato anche
per i file modificati con uso del percorso:git status


2

Bene, il mio caso quando non vuoi preoccuparti dell'elenco dei file. Mostrali tutti.

Quando hai già eseguito il git addtuo elenco di file:

$ git diff --cached $(git diff --cached --name-only)

Nelle versioni più recenti di git, è possibile utilizzare --stagedanche, che è sinonimo di--cached .

Lo stesso può essere utilizzato per i file non aggiunti ma senza --cachedopzione.

$ git diff $(git diff --name-only)

Alias ​​del comando Git per l'opzione "cache":

$ git config --global alias.diff-cached '!git diff --cached $(git diff --cached --name-only)'

3
Grazie per i dettagli git diff --cached - solo -name era il comando che stavo cercando ....
Doogle

1

Vai al tuo rispettivo repository git, quindi esegui il comando seguente:

nome file git diff

Si aprirà il file con le modifiche contrassegnate, premere il tasto Invio / Invio per scorrere il file verso il basso.

Il nome file PS deve includere il percorso completo del file oppure è possibile eseguire senza il percorso completo del file andando nella rispettiva directory / cartella del file


0

Puoi anche usare un editor di testo intuitivo. Mostrano i colori sulle linee che sono state modificate, un altro colore per le linee aggiunte, un altro colore per le linee eliminate, ecc.

Un buon editor di testi che fa questo è Atom 1.0 di GitHub .

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.