2013-09-04 14 views
7

Esiste un flusso di lavoro intelligente per creare un ramo pull_request su una forcella divergente da un repository upstream, in modo che il ramo pull_request corrisponda sempre perfettamente al "master" a monte?Sostituire completamente la forcella con origine (github)

Cioè,

1) Ho una forcella che è discostato notevolmente dal telecomando genitore.

2) Voglio mantenere la mia forchetta (non ha senso eliminarlo) ma, voglio anche rilasciare in modo pulito le richieste di pull che sono minimamente divergenti dal repository originale upstream.

Quindi, c'è un modo per creare un ramo nella mia forcella che è una replica perfetta del master di un altro telecomando?

+3

'git pull upstream master: upstream-master'? – Ryan

risposta

12

Prima di tutto, non dovresti modificare il ramo locale master, dovresti creare solo rami di funzionalità. Se si mantiene il vostro locale master non modificato, quindi è possibile recuperare le ultime modifiche del pronti contro termine a monte:

git remote add upstream <url-for-upstream-repo> 
git fetch upstream 

Ora la filiale remota-tracking upstream/master è sincronizzato con le ultime modifiche da upstream. Opzionalmente, è possibile inoltre aggiornare il locale master se si desidera:

git checkout master 
git merge upstream/master 

Ora è possibile creare funzionalità dirama di upstream/master:

git checkout -b feature upstream/master 

Quando si desidera sincronizzare i caratteristica rami con le ultime modifiche da upstream, è possibile utilizzare rebase, a condizione che nessun altro funzioni anche sul ramo della funzione (altrimenti finirai per forzare la risincronizzazione con la cronologia modificata). rebase è in realtà l'ideale per questo flusso di lavoro, perché di solito si può usare per sincronizzare questi rami con la frequenza che si desidera, senza creare una storia disordinato, perché non creano merge impegna:

git fetch upstream 
git checkout feature 
git rebase upstream/master 

Si potrebbe anche git merge upstream/master invece di rebasing, ma ti lascerai dietro un commit di merge, quindi nel tempo creerai una storia più complicata unendola invece di ricomporre.

Quando si è pronti a inviare una richiesta di pull, è sufficiente premere il numero origin ed effettuare la richiesta contro lo master a monte.

Il poster originale chiede:

[I] s 'è un modo per creare una filiale nella mia forcella che è una replica perfetta del padrone di un altro telecomando?

Finché il locale master non si è discostato da upstream/master (che non dovrebbe, se hai fatto il tuo lavoro in questi rami invece che direttamente in master), poi basta spingere il locale master al tuo origin:

git push origin master 

In alternativa, è possibile utilizzare un refspec per spingere il telecomando-tracking ramo upstream/master al origin/master:

git push origin upstream/master:master 
+0

Questo è l'argomento migliore che abbia mai sentito per l'utilizzo di rami per tutto / – jayunit100

Problemi correlati