Ricerca…


Sintassi

  • git diff [options] [<commit>] [--] [<path>…​]
  • git diff [options] --cached [<commit>] [--] [<path>…​]
  • git diff [options] <commit> <commit> [--] [<path>…​]
  • git diff [options] <blob> <blob>
  • git diff [options] [--no-index] [--] <path> <path>

Parametri

Parametro Dettagli
-p, -u, --patch Genera patch
-s, --no-patch Sopprimere l'output diff. Utile per comandi come git show che mostrano la patch di default o per annullare l'effetto di --patch
--crudo Genera il diff in formato raw
--diff-algoritmo = Scegli un algoritmo diff. Le varianti sono le seguenti: myers , minimal , patience , histogram
--sommario Esegue un riassunto condensato delle informazioni di intestazione estesa come creazioni, rinomina e modifiche di modalità
--name-only Mostra solo i nomi dei file modificati
--name-status Mostra nomi e stati dei file modificati Gli stati più comuni sono M (Modificato), A (Aggiunto) e D (Eliminato)
--dai un'occhiata Avverti se le modifiche introducono marcatori di conflitto o errori di spazi bianchi. Gli errori considerati degli spazi bianchi sono controllati dalla configurazione core.whitespace . Per impostazione predefinita, gli spazi vuoti finali (comprese le righe costituite esclusivamente da spazi bianchi) e uno spazio che è immediatamente seguito da un carattere di tabulazione all'interno del rientro iniziale della riga sono considerati errori di spazi bianchi. Esce con stato diverso da zero in caso di problemi. Non compatibile con --exit-code
--full-index Invece della prima manciata di caratteri, mostra i nomi degli oggetti blob pre e post immagine completi sulla riga "index" quando generi output di formato patch
--binario Oltre a --full-index , genera un diff binario che può essere applicato con git apply
-un testo Tratta tutti i file come testo.
--colore Imposta la modalità colore; vale a dire --color=always se vuoi ridurre un diff a meno e mantenere la colorazione di Git

Mostra le differenze nel ramo di lavoro

git diff

Ciò mostrerà le modifiche non applicate sul ramo corrente dal commit prima di esso. Mostrerà solo i cambiamenti relativi all'indice, nel senso che mostra ciò che potresti aggiungere al prossimo commit, ma non lo ha fatto. Per aggiungere (stage) queste modifiche, puoi usare git add .

Se un file è messo in scena, ma è stato modificato dopo che è stato messo in scena, git diff mostrerà le differenze tra il file corrente e la versione a fasi.

Mostra le differenze per i file staged

git diff --staged

Questo mostrerà le modifiche tra il commit precedente e i file attualmente in scena.

NOTA: puoi anche usare i seguenti comandi per ottenere la stessa cosa:

git diff --cached

Quale è solo un sinonimo per --staged o

git status -v

Che attiverà le impostazioni dettagliate del comando di status .

Mostra le modifiche sia a fasi che a quelle non modificate

Per mostrare tutte le modifiche graduali e non modificate, utilizzare:

git diff HEAD

NOTA: puoi anche usare il seguente comando:

git status -vv

La differenza è che l'output di quest'ultimo in realtà ti dirà quali modifiche sono messe in scena per il commit e quali no.

Mostra le modifiche tra due commit

git diff 1234abc..6789def    # old   new

Ad esempio: mostra le modifiche apportate negli ultimi 3 commit:

git diff @~3..@    # HEAD -3   HEAD

Nota: i due punti (..) sono opzionali, ma aggiungono chiarezza.

Questo mostrerà la differenza testuale tra i commit, indipendentemente da dove si trovano nell'albero.

Usando la fusione per vedere tutte le modifiche nella directory di lavoro

git difftool -t meld --dir-diff

mostrerà le modifiche della directory di lavoro. In alternativa,

git difftool -t meld --dir-diff  [COMMIT_A] [COMMIT_B]

mostrerà le differenze tra 2 commit specifici.

Mostra le differenze per un file o una directory specifici

git diff myfile.txt

Mostra le modifiche tra il commit precedente del file specificato ( myfile.txt ) e la versione modificata localmente che non è ancora stata messa in scena.

Questo funziona anche per le directory:

git diff documentation

Quanto sopra mostra le modifiche tra il commit precedente di tutti i file nella directory specificata ( documentation/ ) e le versioni localmente modificate di questi file, che non sono ancora stati messi in scena.

Per mostrare la differenza tra alcune versioni di un file in un dato commit e la versione HEAD locale è possibile specificare il commit che si desidera confrontare:

git diff 27fa75e myfile.txt

O se vuoi vedere la versione tra due commit separati:

git diff 27fa75e ada9b57 myfile.txt

Per mostrare la differenza tra la versione specificata ada9b57 e l'ultimo commit sul ramo my_branchname per la sola directory relativa my_changed_directory/ puoi farlo:

git diff ada9b57 my_branchname my_changed_directory/

Visualizzazione di un word-diff per le linee lunghe

git diff [HEAD|--staged...] --word-diff

Piuttosto che visualizzare le linee modificate, questo mostrerà le differenze all'interno delle linee. Ad esempio, piuttosto che:

-Hello world
+Hello world!

Quando l'intera riga è contrassegnata come modificata, word-diff modifica l'output in:

Hello [-world-]{+world!+}

Puoi omettere i marcatori [- , -] , {+ , +} specificando --word-diff=color o --color-words . Questo userà solo la codifica a colori per sottolineare la differenza:

Esempio di utilizzo di git diff - color-words

Visualizzazione di un'unione a tre vie incluso l'antenato comune

git config --global merge.conflictstyle diff3

Imposta lo stile diff3 come predefinito: invece del solito formato nelle sezioni in conflitto, mostra i due file:

<<<<<<< HEAD
left
=======
right
>>>>>>> master

includerà una sezione aggiuntiva contenente il testo originale (proveniente dall'antenato comune):

<<<<<<< HEAD
first
second
||||||| 
first
=======
last
>>>>>>> master

Questo formato facilita la comprensione del conflitto di fusione, ad es. in questo caso a livello locale second è stato aggiunto, mentre a distanza cambiato first a last , risolvendo a:

last
second

La stessa risoluzione sarebbe stata molto più difficile utilizzando l'impostazione predefinita:

<<<<<<< HEAD
first
second
=======
last
>>>>>>> master

Mostra le differenze tra la versione corrente e l'ultima versione

git diff HEAD^ HEAD

Questo mostrerà le modifiche tra il commit precedente e il commit corrente.

Testo con codifica UTF-16 diff e file plist binari

È possibile diff file con codifica UTF-16 (file di stringhe di localizzazione os iOS e macOS sono esempi) specificando come git dovrebbe diffare questi file.

Aggiungi quanto segue al tuo file ~/.gitconfig .

[diff "utf16"]
textconv = "iconv -f utf-16 -t utf-8"

iconv è un programma per convertire diverse codifiche .

Quindi modificare o creare un file .gitattributes nella directory principale del repository in cui si desidera utilizzarlo. O semplicemente modifica ~/.gitattributes .

*.strings diff=utf16

Questo convertirà tutti i file che terminano in .strings prima di git .strings .

Puoi fare cose simili per altri file, che possono essere convertiti in testo.

Per i file plist binari si modifica .gitconfig

[diff "plist"]
textconv = plutil -convert xml1 -o -

e .gitattributes

*.plist diff=plist

Confronto di rami

Mostra le modifiche tra la punta del new e il suggerimento original :

git diff original new     # equivalent to original..new

Mostra tutte le modifiche su new quanto derivato original :

git diff original...new     # equivalent to $(git merge-base original new)..new

Utilizzando solo un parametro come

git diff originale

è equivalente a

git diff original..HEAD

Mostra le modifiche tra due rami

git diff branch1..branch2

Produrre un diff compatibile con patch

A volte hai solo bisogno di un diff da applicare usando la patch. Il normale git --diff non funziona. Prova questo invece:

git diff --no-prefix > some_file.patch

Poi da qualche altra parte è possibile invertire:

patch -p0 < some_file.patch

differenza tra due commit o branch

Per visualizzare la differenza tra due rami

git diff <branch1>..<branch2>

Per visualizzare la differenza tra due rami

git diff <commitId1>..<commitId2>

Per visualizzare diff con il ramo corrente

git diff <branch/commitId>

Per visualizzare il riepilogo delle modifiche

git diff --stat <branch/commitId>

Per visualizzare i file modificati dopo un determinato commit

git diff --name-only <commitId>

Per visualizzare file diversi da un ramo

git diff --name-only <branchName>

Per visualizzare i file modificati in una cartella dopo un determinato commit

git diff --name-only <commitId> <folder_path>


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow