Ho appena fatto unCome annullare una git merge squash?
git merge --squash feature-branch
nel mio develop
ramo.
Il problema è che il comando precedente ha aggiornato la testa senza creare un nuovo commit. La mia intenzione era quella di creare un singolo commit da applicare alla testa di develop
.
Quindi, in breve, il log per il ramo develop
prima e dopo l'unione è esattamente lo stesso.
C'è un modo per ripristinare develop
a quello che era prima del git merge
?
Grazie.
Soluzione
Sulla base del commento da Dan D. e la risposta accettata seguito sono stato in grado di risolvere il mio problema. Vedi sotto cosa ho fatto nel caso tu sia nella stessa barca:
1 - Ho eseguito git reflog
e elencava tutti i commit e i checkout che ho fatto con il mio ramo develop
.
2 - Invece di fare un git reset [email protected]{1}
come suggerito, ho trovato il numero quando ho eseguito l'ultimo commit da sviluppare che volevo mantenere. Nel mio caso era [email protected]{188}
. Quindi ho digitato git reset [email protected]{188}
.
3 - Ho eseguito uno git log
e aveva un registro pulito che mostra solo i commit che avevo prima di fare l'unione errata.
4 - Ho eseguito git add -A .
per mettere in scena tutti i nuovi file creati durante lo sviluppo delle mie funzionalità.
5 - mi sono imbattuto git commit -m "install feature-x"
6 - Come risultato ora ho ramo develop
con i file corretti e il registro è pulito - mostrando solo un commit per tutti i cambiamenti che ho fatto durante lo sviluppo di feature-x
.
Ho ancora bisogno di scoprire perché il mio originale git merge --squash feature-branch
non ha funzionato come previsto.
Soluzione 2
risposta di Marco Longair è una soluzione definitiva al mio problema. L'ho appena testato e funziona. Vedi sotto il processo che sto usando ora di schiacciare tutti i commit interni all'interno di un feature-branch
e comprendono un solo impegno al ramo develop
:
git checkout develop
git merge --squash feature-branch
git commit -m "install of feature-branch"
La sequenza sopra funziona come un fascino.
Utilizzare 'git reflog'. –