Recentemente ho commesso un errore con la mia strategia di git merge e non ho notato gli errori di risultato fino a quando non ho già continuato a lavorare sul progetto e ho fatto più commit. Per brevità, diciamo che ho due rami, hotfix
e new_feature
. Ho fatto qualcosa di simile al seguente:Git: tirato il ramo sbagliato, quindi ha spinto l'unione. Come annullare?
git checkout new_feature
git commit -m "Commit to the feature branch"
git checkout hotfix
git pull origin new_feature # Uh oh, I pulled the wrong branch!
git commit -m "Commit to the hotfix"
git push origin hotfix # Uh Oh, pushed the bad merge!
Dopo gli eventi di cui sopra, altri sviluppatori anche fatte commit al ramo Hotfix. Ora, abbiamo un aggiornamento rapido che vogliamo escludere, ma non possiamo perché contiene funzioni che non sono complete.
Ho visto un sacco di domande simili su questa situazione, ma nessuna che corrisponde al 100% (la maggior parte di esse comporta l'annullamento del commit subito dopo la brutta tirata, senza spingere prima. Ho fatto un ulteriore passo avanti, e davvero borked cose
Qualsiasi passo-passo guida su come posso rimediare a questo
Grazie
Edit:.?! molte altre risposte menzionano git reflog
, ecco una copia modificata di mine Ho cambiato gli hash e i nomi dei rami per abbinarli al mio esempio ab ove.
aaaaaaa [email protected]{0}: checkout: moving from new_feature to hotfix
bbbbbbb [email protected]{1}: checkout: moving from hotfix to new_feature
aaaaaaa [email protected]{2}: commit: Added analytics tracking
ccccccc [email protected]{3}: commit (merge): Fixed a merge issue in compiled css # BAD MERGE?
ddddddd [email protected]{4}: checkout: moving from new_feature to hotfix
eeeeeee [email protected]{5}: commit: Finished updating the events for the header
ddddddd [email protected]{6}: checkout: moving from hotfix to new_feature
ddddddd [email protected]{7}: checkout: moving from new_feature to hotfix
Nel reflog sopra, [email protected]{3}
sembra essere il cattivo di unione. Ero nel ramo hotfix
e ho inserito il ramo new_feature
, che ha dato conflitti di unione. Li ho riparati e spinto. Cosa dovrei fare per risolvere questo problema?
Ma non c'è solo un commit. Il commit "Uh Oh" era una fusione da un altro ramo, che includeva un sacco di commit! Avrei bisogno di passare attraverso la cronologia degli aggiornamenti rapidi e ripristinare una serie di commit, che sembra un po '"hacky" –
La versione modificata ha funzionato come un fascino. –