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:
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>