realtà tuttigit diff
s sono commit-coppia-saggio: quanto sopra confronta gli alberi/i file in abc000
contro quelli in def555
. Ad esempio, se dir/file
sostituisce dir/file
con 10 tra abc000
e 6 (ad esempio, la modifica di def333
viene annullata da qualcosa lungo il percorso) è possibile che non ci sia il numero dir/file
.
In generale, però, le modifiche apportate def333
avranno modificato dir/file
in modo che si presenta quando si confrontano la versione abc000
contro quello in def555
. Quindi vedrai il cambiamento probabilmente.
Il modo più semplice per ottenere un diff che indica "ciò che def555
potrebbe apparire come se def333
stati ritornato" è quello di fare proprio questo: creare un albero (su un ramo temporaneo) con il cambiamento ritornato. Per farlo con un ramo reale di nome, si potrebbe fare qualcosa di simile:
git checkout def555 # by ID, so that you get a "detached HEAD"
git checkout -b temp-branch
git revert --no-edit def333
git diff [options] abc000
git checkout somebranch; git branch -D temp-branch
Che cosa succede se non si vuole un ramo temporaneo? Bene, è banale: basta non crearne uno. Ottieni un "HEAD distaccato" come sopra, effettua il ripristino come sopra, quindi git checkout somebranch
. Non c'è un ramo temporaneo da eliminare, ad eccezione di quello senza nome che git ti avverte che ti stai lasciando alle spalle ... che è proprio quello che volevi.
Si potrebbe anche usare 'revert --no-commit', quindi non sarebbe necessario un ramo (o una testa staccata) e non lasciare nulla dietro. – Bergi
@Berg: true (anche se sarà necessario 'git reset --hard' per pulire l'albero di lavoro una volta che hai finito). – torek