Da git reset
"pull" o "merge" lascia sempre la punta originale del ramo corrente ORIG_HEAD.
git reset --hard ORIG_HEAD
La reimpostazione forzata su di esso riporta il file di indice e l'albero di lavoro su quello stato e reimposta la punta del ramo su quel commit.
git reset --merge ORIG_HEAD
Dopo aver esaminato il risultato dell'unione, è possibile che la modifica nell'altro ramo non sia soddisfacente. L'esecuzione di " git reset --hard ORIG_HEAD" ti consentirà di tornare al punto in cui ti trovavi, ma eliminerà le modifiche locali che non desideri. " git reset --merge" mantiene le modifiche locali.
Prima di applicare eventuali patch, ORIG_HEAD è impostato sulla punta del ramo corrente.
Ciò è utile se si hanno problemi con più commit, come eseguire ' git am' sul ramo sbagliato o un errore nei commit che è più facilmente risolto cambiando la cassetta postale (es. + Errori nelle righe "Da:").
Inoltre, l'unione imposta sempre ' .git/ORIG_HEAD' sullo stato originale di HEAD, in modo che un'unione problematica possa essere rimossa usando ' git reset ORIG_HEAD'.
Nota: da qui
HEAD è un puntatore mobile. A volte significa l'attuale ramo, a volte no.
Quindi HEAD NON è già sinonimo di "ramo attuale" ovunque.
HEAD significa "corrente" ovunque in git, ma non significa necessariamente "ramo corrente" (cioè HEAD distaccato).
Ma quasi sempre significa "commit corrente".
È il commit " git commit" si basa su, e " git diff --cached" e " git status" confrontano.
Significa il ramo corrente solo in contesti molto limitati (esattamente quando vogliamo che un nome di ramo operi su --- reimpostazione e crescita della punta del ramo tramite commit / rebase / ecc.).
Reflog è un veicolo per tornare indietro nel tempo e le macchine del tempo hanno un'interazione interessante con la nozione di "corrente".
HEAD@{5.minutes.ago}potrebbe significare "dereference HEAD symref per scoprire quale ramo siamo su RIGHT NOW, e quindi scoprire dove era la punta di quel ramo 5 minuti fa".
In alternativa, potrebbe significare "qual è il commit che avrei chiamato HEAD 5 minuti fa, ad esempio se avessi fatto" git show HEAD "allora".
git1.8.4 (luglio 2013) introduce ha introdotto una nuova notazione!
(in realtà, sarà per 1.8.5 o 1.9, Q4 2013: reintrodotto con commit 9ba89f4 )
Invece di digitare quattro lettere maiuscole " HEAD", puoi pronunciare " @" ora,
ad es. " git log @".
Vedi commit cdfd948
Digitare ' HEAD' è noioso, soprattutto quando possiamo usare ' @' invece.
Il motivo della scelta di " @" è che deriva naturalmente dalla ref@opsintassi (ad esempio HEAD@{u}), tranne per il fatto che non abbiamo alcun riferimento e nessuna operazione, e quando non li abbiamo, ha senso assumerlo HEAD".
Quindi ora possiamo usare ' git show @~1', e tutta quella bontà.
Fino ad ora ' @' era un nome valido, ma è in conflitto con questa idea, quindi rendiamolo non valido. Probabilmente pochissime persone hanno usato questo nome.
Un post sul blog durante il periodo 1.8.4-rc3 (14 agosto 2013) ha annunciato che questa funzione è stata ripristinata e ritardata (grazie Cupcake per l'heads-up ).
Ancora una volta, viene nuovamente introdotto con commit 9ba89f4 (settembre 2013).
Vedi commit 2c2b664 :
Ripristina "Aggiungi nuova @scorciatoia per HEAD"
Questo ripristina il commit di cdfd948 , in quanto non si applica solo a " @" (e ai moduli con modificatori come @{u}applicati ad esso), ma influisce anche su " refs/heads/@/foo", cosa che non dovrebbe.
L'idea di base di dare una scorciatoia potrebbe essere buona, e l'argomento può essere riprovato più tardi, ma torniamo indietro per evitare di influenzare i casi d'uso esistenti per ora per la prossima versione.
HEADè ora (imminente git1.8.4) '@'! Vedi la mia risposta modificata di seguito