Per le modifiche nascoste in Merge commit
Unisci commit automaticamente le loro modifiche sono nascoste dall'output del registro Git. Sia il piccone che la colpa inversa non hanno trovato il cambiamento. Quindi la linea che volevo era stata aggiunta e successivamente rimossa e volevo trovare l'unione che la rimuoveva. La git log -p -- path/file
cronologia dei file ha mostrato solo che è stata aggiunta. Ecco il modo migliore che ho trovato per trovarlo:
git log -p -U9999 -- path/file
Cerca la modifica, quindi cerca all'indietro "^ commit" - il primo "^ commit" è il commit in cui il file aveva l'ultima riga. Il secondo "^ commit" è dopo che è scomparso. Il secondo commit potrebbe essere quello che lo ha rimosso. Il-U9999
obiettivo è mostrare l'intero contenuto del file (dopo ogni modifica del file), supponendo che i file abbiano tutte un massimo di 9999 righe.
Trova eventuali fusioni correlate tramite forza bruta (diff ogni possibile unione di commit con il suo primo genitore, contro tonnellate di commit)
git log --merges --pretty=format:"git diff %h^...%h | grep target_text" HEAD ^$(git merge-base A B) | sh -v 2>&1 | less
(Ho provato a limitare maggiormente il filtro di revisione, ma ho riscontrato problemi e non lo consiglio. Le modifiche di aggiunta / rimozione che stavo cercando erano su rami diversi che sono stati uniti in momenti diversi e A ... B non includeva quando le modifiche sono state effettivamente integrate nella linea principale.)
Mostra un albero Git con questi due commit (e molta della complessa storia di Git rimossa):
git log --graph --oneline A B ^$(git merge-base A B)
(A è il primo commit sopra, B è il secondo commit sopra)
Mostra la storia di A e la storia di B meno la storia di A e B.
Versione alternativa (sembra mostrare il percorso in modo più lineare rispetto al normale albero della cronologia di Git - tuttavia preferisco il normale albero della cronologia di Git):
git log --graph --oneline A...B
Tre, non due punti - tre punti significa "r1 r2 --not $ (git merge-base --all r1 r2). È l'insieme di commit che sono raggiungibili da uno di r1 (lato sinistro) o r2 (destro lato), ma non da entrambi. " - fonte: "man gitrevisions"
git log -S<string> /path/to/file
vuole un-c
o-cc
anche per mostrare le rimozioni durante l'unione (conflitti)