banale esempio di un alias per recuperare la versione precedente di un file.
Il trucco è quello di formattare l'output di log con --format solo tornare l'hash commettere
[alias]
prev = "!f(){ git checkout $(git log -1 --format="%H" --skip=1 -- ${GIT_PREFIX:-.}/$1) -- ${GIT_PREFIX:-.}/$1; git reset ${GIT_PREFIX:-}/$1; }; f"
L'utilizzo di git log -1
assicura che git prev
restituisce sempre il file principale immediato. La selezione del genitore successivo può essere più complessa.
Si noti inoltre che il file, una volta estratto, viene immediatamente aggiunto all'indice. Non è unito alla copia esistente e non avvisa di sovrascrivere le modifiche locali. Ho incluso una chiamata a git-reset per garantire che il file di estrazione sia presente solo nella directory di lavoro e non nell'indice.
L'utilizzo di GIT_PREFIX
consente di immettere percorsi relativi, sebbene solo versioni relativamente recenti di git supportino GIT_PREFIX.
Edit ..
stessa cosa usando git rev-list .. un comando git molto potente progettato per attraversare git grafici ascendenza quando lo scripting e l'automazione ...
[alias]
prev = "!f(){ git checkout $(git rev-list --max-count=1 --skip=1 HEAD -- ${GIT_PREFIX:-.}/$1) -- ${GIT_PREFIX:-.}/$1; git reset ${GIT_PREFIX:-}/$1; }; f"
Cosa stai chiedendo qui? Un alias per verificare la versione di un file che è registrato in un genitore di 'HEAD'? Si prega di precisare. – Jubobs
Inoltre, qual è 'FHEAD'? – Jubobs
@Jubobs La domanda mi sembra abbastanza chiara: trova la versione precedente di un file specifico, dove "precedente" significa "il modo in cui era appena prima dell'ultimo commit che ha modificato quel file" (e ignorando altri commit che non cambiano quel file). – hvd