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? Sono a conoscenza dello stato git , ma mi piacerebbe vedere le differenze effettive – non solo i nomi dei file che sono messi in scena.

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

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 si potrebbe dire per aggiungere ulteriormente all’indice, ma non lo si è 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?

    Dovrebbe essere solo:

     git diff --cached 

    --cached significa mostrare le modifiche nella cache / index (cioè le modifiche in scena) rispetto all’attuale HEAD . --staged è sinonimo di --cached .

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

    Un semplice grafico rende questo più chiaro:

    Semplici differenze di Git

    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.

    Inoltre :

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

    Se ti interessa una visualizzazione visiva affiancata, lo strumento diff diff è visibile. Mostrerà anche tre riquadri se alcuni, ma non tutti i cambiamenti sono in scena. In caso di conflitti, ci saranno anche quattro riquadri.

    Screenshot di diffuse con modifiche graduali e non modificate

    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, …

    Vedi anche: Mostra sia l’albero di staging che quello di lavoro in git diff?

    Si noti che git status -v mostra anche le modifiche graduali! (significa che devi aver messo in scena – git add – alcune modifiche. Nessuna modifica in staged, nessuna diff con git status -v .
    Lo fa da Git 1.2.0, febbraio 2006 )

    Nella sua forma estesa (predefinita), 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 sia l’albero di staging che quello di lavoro in git diff? ” (Git 2.3.4+, Q2 2015):

     git status -v -v 

    Puoi usare questo comando.

     git diff --cached --name-only 

    L’opzione --cached di git diff significa ottenere i file di --cached e l’opzione --name-only significa ottenere solo i nomi dei file.

    Dalla versione 1.7 e successive dovrebbe essere:

     git diff --staged 

    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 / 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 con git diff --staged , tranne che ogni volta che lo strumento diff viene eseguito (cioè ogni volta che un file viene elaborato da diff), avvierà lo strumento visual diff 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 dei comandi diff in git

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

    Ad esempio, per far sì che lo strumento visual diff venga lanciato senza chiedere se farlo per ogni file, aggiungi l’opzione -y (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 Index :

     $ git difftool -y --staged <> 

    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 l’opzione -t :

     $ git difftool -t  <> 

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

    Se si dispone di più di un file con modifiche graduali, potrebbe essere più pratico utilizzare git add -i , quindi selezionare 6: diff e infine selezionare i file a cui si è interessati.

    Se le tue intenzioni sono di raggiungere il target di un ramo di repository remoto e il tuo primo passaggio in un log di modifiche di commit era incompleto, puoi correggere l’istruzione di commit prima di premere in questo modo.

    localmente

    … apporta delle modifiche …

     git diff # look at unstaged changes git commit -am"partial description of changes" 

    … richiama più modifiche non menzionate in commit …

    git diff origin / master # guarda le modifiche in scena ma non inviate

    … modifica la dichiarazione di commit a staged …

     git commit --amend -m"i missed mentioning these changes ...." git push 

    Uso di confronto con Staging Area vs Repository

     $git diff --staged 

    Uso di confronto tra lavoro e deposito

     $ git diff 

    ma se un file viene modificato e aggiunto all’area di staging ( $ git add fileName ) e proviamo a vedere la differenza con ( $ git diff ). Non restituirà alcuna differenza poiché il file si trova nell’area di staging e non verrà confrontato con il repository.

    Di default git diff è usato per mostrare le modifiche che non vengono aggiunte all’elenco dei file aggiornati di git. Ma se vuoi mostrare le modifiche che sono aggiunte o scaglionate, devi fornire opzioni extra che permetteranno a Git di sapere che sei interessato a differire o aggiungere file diff .

     $ git diff # Default Use $ git diff --cached # Can be used to show difference after adding the files $ git diff --staged # Same as 'git diff --cached' mostly used with latest version of git 

    Esempio

     $ git diff diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644 --- a/x/y/z.js +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) { - if (a) + if (typeof a !== 'undefined') res = 1; else res = 2; $ git add x/y/z.js $ git diff $ 

    Una volta aggiunti i file, non è ansible utilizzare il valore predefinito di ‘git diff’. Devi fare così: –

     $ git diff --cached diff --git a/x/y/z.js b/x/y/z.js index 98fc22b..0359d84 100644 --- a/x/y/z.js +++ b/x/y/z.js @@ -43,7 +43,7 @@ var a = function (tooltip) { - if (a) + if (typeof a !== 'undefined') res = 1; else res = 2; 

    git gui e git-cola sono utility grafiche che ti permettono di visualizzare e manipolare l’indice. Entrambi includono semplici differenze visive per i file in git-cola e git-cola può anche lanciare uno strumento di visualizzazione visiva affiancato più sofisticato.

    Vedi la mia risposta strettamente correlata su Come rimuovere un file dall’indice in git? e anche questo catalogo ufficiale di Git – GUI Clients .

    Pensa anche allo strumento gitk , fornito di git e molto utile per vedere le modifiche