6

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?

risposta

3

Trova l'hash commettere: git log --pretty=format:"%h %s" | grep "Commit to the hotfix"

riportare il "Uh oh" commit: git revert 15d2e1f -m 2

+0

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" –

+0

La versione modificata ha funzionato come un fascino. –