2012-04-24 8 views
12

Ecco lo scenario: I fork repository di someones da Github e clone in una directory locale. Apporto una modifica, la invio e la sposto nel mio repository biforcuto. Quindi invio una richiesta di pull al repository originale, ma viene rifiutata per qualsiasi motivo. Il repository originale riceve alcuni commit da altre persone, lasciando la mia versione biforcuta obsoleta. Ora, come posso ottenere l'ultima versione del repository originale (sul mio repository biforcato e localmente)? E inoltre, come posso cancellare la mia cronologia dei commit da Github per il mio commit rifiutato?Come riprendere un repository Git biforcato senza eliminare e ripetere il forking?

+0

possibile duplicato del [Abbandonando Git impegna su Github per richieste di pull rifiutate] (http://stackoverflow.com/questions/9538320/abandoning-git-commits-on-github-for-rejected-pull-requests) – CharlesB

risposta

8

Non apportare mai le proprie modifiche nel ramo principale, è necessario creare un nuovo ramo, apportare le modifiche e spingerlo. In ogni modo, se si desidera rendere il vostro ramo pari a quella remota fare:

Supponendo di avere il monte come git fetch upstreamgit checkout -f -B master upstream/master

Il comando a distanza cassa di cui sopra sarebbe se maestro ramo è lì andare avanti e sovrascrivere con a monte/master se non è lì crealo dal upstream/master.

Se non avete a monte aggiunto come l'utilizzo remoto git remote add upstream repositoryurl

EDIT: Va -B

EDIT: git reset --hard upstream/master è più appropriato in realtà

4

Mantenere sincronizzato il repository su GitHub in sincronizzazione è un processo in due passaggi.

  1. Tenere la repo locale in sincronia con:

    git fetch a monte; git merge monte/master

  2. Tenere la forchetta su GitHub in sincronia con il tuo repo locale

    git push origine maestro

Vedere GitHub Fork A Repo qualche spiegazione. È necessario impostare 'upstream' come remoto nel repository da cui si è biforcati.

Per i "commit rifiutati", se li hai fatti su una filiale locale, puoi semplicemente eliminare il ramo. Se non si trova su una filiale locale, dovrai reimpostare l'HEAD del ramo sul commit scelto. Come:

# Assume you are on master and need to go back to commit BeadBabe 
git checkout -b temp 
git branch -f master BeadBabe 
git checkout master 
git branch -d temp 

Andato.

+1

Ho trovato questo leggermente più chiaro della risposta accettata. Grazie per la spiegazione! – Tim

Problemi correlati