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@op
sintassi (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