Domanda Come posso mostrare le modifiche che sono state messe in scena?


Ho messo in scena alcune modifiche da impegnare; come posso vedere il diff di tutti i file che sono messi in scena per il prossimo commit? Ne sono consapevole stato git, ma mi piacerebbe vedere le differenze reali - non solo i nomi dei file che sono messi in scena.

Ho visto che il git-diff (1) dice la pagina man

git diff [--options] [-] [...]

Questo modulo è per visualizzare le modifiche apportate rispetto all'indice (area di staging per il prossimo commit). In altre parole, le differenze sono ciò che tu poteva dì a git di aggiungere ulteriormente all'indice, ma non l'hai ancora fatto. Puoi mettere in scena queste modifiche usando git-add (1).

Sfortunatamente, non riesco a dare un senso a questo. Ci dev'essere un pratico one-liner che potrei creare un alias, giusto?


1692
2017-10-19 09:57


origine


risposte:


Dovrebbe essere solo:

git diff --cached

--cached indica le modifiche nella cache / indice (cioè le modifiche graduali) rispetto alla corrente HEAD. --staged è sinonimo di --cached.

--staged e --cached non punta a HEAD, solo differenza rispetto a HEAD. Se si seleziona ciò che impegnarsi utilizzando git add --patch (o git add -p), --staged restituirà ciò che è in scena.


2091
2017-10-19 10:07



Un semplice grafico rende questo più chiaro:

Simple Git diffs

git diff

Mostra le modifiche tra la directory di lavoro e l'indice. Questo mostra cosa è stato cambiato, ma non è messo in scena per un commit.

git diff --cached

Mostra le modifiche tra l'indice e l'HEAD (che è l'ultimo commit su questo ramo). Questo mostra cosa è stato aggiunto all'indice e messo in scena per un commit.

git diff HEAD

Mostra tutte le modifiche tra la directory di lavoro e HEAD (che include le modifiche nell'indice). Mostra tutte le modifiche dall'ultimo commit, indipendentemente dal fatto che siano state messe in scena per il commit o meno.

Anche:

C'è un po 'più di dettagli su 365Git.


1409
2017-10-24 21:05



Se ti interesserebbe una vista visiva side-by-side, il diffondere lo strumento visivo differenziale può farlo. Mostrerà anche tre riquadri se alcuni, ma non tutti i cambiamenti sono in scena. In caso di conflitti, ci saranno anche quattro riquadri.

Screenshot of diffuse with staged and unstaged edits

Richiamalo con

diffuse -m

nella tua copia di lavoro Git.

Se me lo chiedi, la migliore differenza visiva che ho visto per un decennio. Inoltre, non è specifico di Git: Interagisce con una pletora di altri VCS, tra cui SVN, Mercurial, Bazaar, ...

Guarda anche: Mostra l'albero di staging e di lavoro in git diff?


51
2018-03-18 07:22



Nota che git status -v  anche mostra i cambiamenti graduali! (significa che devi aver messo in scena - git add -- alcuni cambiamenti. Nessuna modifica in fasi, nessuna differenza con git status -v.
Lo fa da allora Git 1.2.0, febbraio 2006)

Nella sua forma lunga (predefinito), git status ha un'opzione "verbose" non documentata che visualizza effettivamente la differenza tra HEAD e index.

E sta per diventare ancora più completo: vedi "Mostra l'albero di staging e di lavoro in git diff?"(Git 2.3.4+, Q2 2015):

git status -v -v

37
2017-08-31 10:05



Puoi usare questo comando.

git diff --cached --name-only

Il --cachedopzione di git diff significa ottenere i file di staging e il file --name-only opzione significa ottenere solo i nomi dei file.


22
2017-07-19 17:39



Dalla versione 1.7 e successive dovrebbe essere:

git diff --staged

14
2017-08-14 23:33



UTILIZZO DI UN UTENSILE VISIVO DIFF

La risposta predefinita (alla riga di comando)

Le risposte migliori qui mostrano correttamente come visualizzare le modifiche memorizzate nella cache / in programma nel file Index:

$ git diff --cached

o $ git diff --staged che è un alias.


Avviare invece lo strumento di visualizzazione differenziale

La risposta predefinita sputerà i cambiamenti di diff a git bash (cioè sulla riga di comando o nella console). Per coloro che preferiscono una rappresentazione visiva delle differenze di file staged, c'è uno script disponibile all'interno di git che avvia uno strumento di visualizzazione visivo per ogni file visualizzato anziché mostrarlo sulla riga di comando, chiamato difftool:

$ git difftool --staged

Questo farà lo stesso questo git diff --staged, tranne quando viene eseguito lo strumento diff (ovvero ogni volta che un file viene elaborato da diff), verrà lanciato lo strumento di visualizzazione differenziale predefinito (nel mio ambiente, questo è KDiff3).

Dopo l'avvio dello strumento, lo script git diff si interromperà fino alla chiusura dello strumento di visualizzazione visivo. Pertanto, dovrai chiudere ogni file per vedere quello successivo.


Puoi sempre usare difftool al posto di diff nei comandi git

Per tutte le tue esigenze di visualizzazione, git difftool funzionerà al posto di qualsiasi git diff comando, comprese tutte le opzioni.

Ad esempio, per avviare lo strumento visual diff senza chiedere se farlo per ogni file, aggiungere il -y opzione (penso che di solito lo vorrai !!):

$ git difftool -y --staged

In questo caso estrarrà ogni file nello strumento di visualizzazione, uno alla volta, richiamando quello successivo dopo che lo strumento è stato chiuso.

O per guardare il diff di un particolare file che è messo in scena nel Index:

$ git difftool -y --staged <<relative path/filename>>

Per tutte le opzioni, vedere la pagina man:

$ git difftool --help


Impostazione di Visual Git Tool

Per utilizzare uno strumento git visivo diverso da quello predefinito, utilizzare il comando -t <tool> opzione:

$ git difftool -t <tool> <<other args>>

Oppure, vedere la pagina man di difftool per come configurare git per usare un diverso strumento di visualizzazione visivo predefinito.


10
2018-03-14 14:30



Se si dispone di più di un file con modifiche graduali, potrebbe essere più pratico da utilizzare git add -i, quindi selezionare 6: diffe infine scegli i file che ti interessano.


7
2017-10-14 18:32