2015-05-20 12 views
5

Farò del mio meglio per descrivere concisamente la mia situazione attuale e sarei molto grato per un consiglio.Come posso ri-unire i commit che sono stati ripristinati in github?

Questa mattina mi sono unito a un grosso ramo di codice del codice che si è rivelato un errore critico. Per annullarlo, il mio collega ha ripristinato l'unione (che aveva diversi commit) in GitHub e dopo aver tirato, tutto sembrava essere buono.

Dopo aver apportato alcune modifiche al ramo di funzionalità, volevo assicurarmi che potesse tornare di nuovo, quindi ho usato 'git merge master' sul mio ramo di funzionalità (come faccio sempre) per assicurarmi che tutto sia aggiornato .

Sorprendentemente, il risultato era quello di eliminare tutto il nuovo codice che ho bisogno di unire di nuovo al repository principale!

E 'dovuto al ripristino che si è verificato sul ramo? Guardando attraverso il log git, posso vedere che tutti i commit sono ancora lì. E ancora più strano, la richiesta pull in github non mostra nessuno dei commit originali nel diff, solo quello che ho cambiato dal ripristino.

Qualcuno può aiutarmi a dare un senso a questo?

So che alcune persone hanno suggerito semplicemente di ripristinare il ripristino, ma ho bisogno di tornare pulito, poiché le modifiche che ho apportato riguardano la struttura di gran parte del codice.

+1

Ciao. prova 'git reflog' nella tua console. ti mostrerà la storia completa di ciò che è stato fatto al tuo repo (non filiale ma completo repo). scansa il punto desiderato nel tempo e prosegui da lì. – CodeWizard

+0

Grazie per il commento! Nel mio caso, i commit sono intervallati dappertutto. Il ramo è stato creato per diversi mesi e non c'è un punto preciso in cui possa essere resettato.Penso che il rebase sia ciò di cui ho bisogno, sto solo cercando di capire come rimuovere completamente i commit che sto aggiungendo di nuovo dal ramo di funzione – Lizza

+1

Ok, postalo male come risposta - il rebase che ti serve – CodeWizard

risposta

6

mi sono imbattuto in questo stesso problema una volta. La mia soluzione è stata quella di "ripristinare il ripristino" prima di unire il master alla mia filiale.

Ciò che fa è lasciarti con tutte le tue modifiche, incluse le nuove correzioni che hai.

git checkout master 
git checkout -b master-with-revert-revered 
git revert <revert commit id> 
git checkout fixed-branch 
git merge master-with-revert-revered 

Dopodiché, il tuo ramo fisso deve essere ricongiunto direttamente in master senza problemi.

+0

Apprezzo l'intuizione, Daniel. Ho provato diverse opzioni fino ad ora e, a causa della complessità di questi commit e del loro numero, penso che ripristinare il ripristino sarà la mia scommessa più sicura. – Lizza

1

Penso che rebase è quello che mi serve, solo cercando di capire come rimuovere completamente i commit Io sono l'aggiunta di nuovo dal ramo funzione

se è necessario "Remøe/merge" commit si dovrebbe usare squash.
Squash è una delle opzioni di rebase.

Per poterlo utilizzare è necessario eseguire il rebase interattivo.
git rebase -i HEAD~10 aprirà un vi (o qualsiasi altro editor che stai usando) e ti permetterà di "rimescolare" i tuoi commit. Puoi rimuovere commit, unirli a uno solo, riordinarli e aggiungerne altri.

Troverete un elenco di opzioni all'interno del VI insieme con l'elenco dei commit che si sceglie di reabse (Nell'esempio sopra ci vorrà l'ultimo 10 HEAD~10)

+0

Grazie per la tua risposta! Quindi, nel mio caso, poiché il ripristino non ha realmente rimosso i commit, voglio eliminarli tutti dal ramo? Sembra che il comando per quello è dd. E sembra anche che il primo commit che devo rimuovere sia oltre 100 commit fa, quindi HEAD ~ 100? – Lizza

+0

Esattamente. hai capito :-) – CodeWizard

+0

Oppure puoi tornare al punto desiderato nel tempo, creare un nuovo ramo da quel punto e quindi riassegnare in modo interattivo questo punto – CodeWizard

Problemi correlati