È possibile utilizzare la formattazione git log
per ottenere gli hash dei commit precedenti su un file. Ad esempio,
git log --pretty=format:'%h' -1 --skip=1 <filename>
ti porterà il 2 ° di durare impegnarsi a toccare un file specifico. Infatti, se non si specifica un nome file, questo ti porterà il 2 ° all'ultimo commit sull'intero repository. Per ottenere gli hash più anziani, si potrebbe impostare un alias di git che chiama una funzione di shell, in questo modo:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
Per usarlo, devi digitare qualcosa come git prior-hash n <filename>
, dove n è il (n + 1) la versione più recente del file. Quindi 1 sarebbe il 2 ° per ultimo impegnare il file, 2 sarebbe il 3 ° a durare, ecc, e 0 sarebbe il commit più recente per toccare quel file. E ancora, il nome file è facoltativo, se si desidera esaminare il repository nel suo complesso.
Sono sicuro che si potrebbe capire come costruire un comando diff da lì:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
diff-prev-easy = "!dp() { git diff $(git prior-hash $1 $2).. $2; }; dp"
che sarebbe utilizzato simile alla prima alias-hash, git diff-prev-easy n <filename>
. Questo confronta la (n + 1) ultima revisione con la revisione più recente del file. Se si voleva confrontare invece la (n + 1) esimo ultima revisione al ennesima ultima revisione, si tratta di un semplice cambiamento:
[alias]
prior-hash = "!ph() { git log --pretty=format:'%h' -1 --skip=$1 $2; }; ph"
diff-prev = "!dp() { git diff $(git prior-hash $1 $2)..$(git prior-hash $(($1 - 1)) $2) $2; }; dp"
che, ancora una volta, viene utilizzato allo stesso modo: git diff-prev n <filename>
Un potenziale il problema da tenere a mente, però, è che gli elenchi git log
si impegna in ordine cronologico, il che potrebbe non essere quello che si desidera. Considerate questo la storia:
1 - 2 - - - 4 - 5 master
\ /
3 - - develop
nostro comando git diff-prev 1
dovrebbe produrre il diff tra commettere 4 e 5, come previsto. Ma git diff-prev 2
mostrerebbe il diff tra commit 3 e 4, che è probabilmente indesiderabile.
Sei sicuro di non voler "dare la colpa"? –