2012-03-02 12 views
16

Ho biforcuto il progetto di qualcuno e fatto alcuni commit. Ho compilato una richiesta di pull, e non è stata accettata (o il cambiamento non era auspicabile, o l'autore ha riscritto la funzionalità per essere in linea con "il suo stile"). Ora sono bloccato con la mia biforcazione locale con alcuni commit extra che non andranno mai a monte. Posso far uscire i set di modifiche, ma poi ho il doppio di commit extra e dovrò caricarli per sempre. È solo brutto!L'abbandono di Git si impegna su Github per richieste di pull rifiutate

Qual è il modo migliore per abbandonare questi commit che nessuno vuole e ottenere indietro la mia forcella per il monitoraggio a monte? So che posso eliminare completamente la forcella e re-fork, ma questo è davvero pesante e perderei qualsiasi altro lavoro che sto facendo.

+0

Per caso hai fatto le tue _proposed_ modifiche in un ramo separato (forked)? –

risposta

19

È possibile ripristinare lo stato repo a un commit precedente. In primo luogo capire quale impegnarsi si desidera reimpostare la repo a:

git log 

Per ripristinare il pronti contro termine a quello stato:

git reset --hard <commit_hash> 

Se si dispone di un pronti contro termine a distanza biforcuta, si può spingere queste modifiche al it:

git push -f <remote> <branch> 

Si potrebbe voler modificare il flusso di lavoro per semplificare le cose in futuro.

Quando lancio un repo e apporto le mie modifiche, ho prima creato due telecomandi. Un telecomando punterà al mio repo fork (es: origin) e aggiungerà altri punti remoti al repository originale che è stato biforcuto da (es: original_repo). Così potrei avere qualcosa di simile:

$ git remote 
    origin 
    original_repo 

creo un ramo di fare tutto il mio lavoro in, es: feature. Quando faccio una richiesta di pull, lo faccio dal ramo feature al ramo original_repomaster. Se la richiesta pull è rifiutata, come nel tuo esempio, puoi semplicemente abbandonare questo ramo. Se si desidera lavorare su ulteriori modifiche, è sufficiente creare un altro ramo da master e utilizzarlo per lavorare.

Inoltre, non impegno o unire eventuali modifiche locali al ramo master. Io uso solo il ramo master per sincronizzarlo con il ramo original_repomaster. es:

git checkout master 
    git fetch original_repo 
    git merge original_repo/master 

Questo assicura il ramo master è sempre sincronizzato con master ramo del pronti contro termine originale. Ad esempio, se la richiesta di pull è stata accettata e unificata, quando avviene il recupero e l'unione, lo master locale avrà anche tutto il codice "approvato" utilizzato nel repository originale.

Fondamentalmente utilizzare master per sincronizzarsi con il repository originale master e sempre diramazione dal master quando si desidera apportare modifiche. Usa quei rami per le tue richieste di pull al repository originale.

2

Indietro il ramo principale di alcuni passaggi (presupponendo che si desideri saltare tre commit indietro) e riscrivere il repository github premendo con -f.

git reset --hard HEAD~3 
git push -f origin master 
Problemi correlati