Contribuire al progetto su GitHub, come "ribasare la mia richiesta pull in cima al master"


98

Ok, quindi contribuisco a un progetto su GitHub. Il progetto su GitHub è upstream, il mio repository forkato su GitHub è origine il mio localrepository sul mio computer.

git checkout -b feature
# Working on feature
git commit -a -m 'only commit on feature'

quindi invio una richiesta pull

git push origin master

La richiesta pull viene esaminata e deve essere apportata una modifica non correlata. Qualcun altro fa un commit e si fonde conupstream/master

Ora mi viene chiesto dal upstreammanutentore di "ribasare la mia richiesta pull in cima al master"

Questa è la mia storia (inserire l'effetto sonoro di Law and Order) .....

Non ho apportato alcuna modifica alla richiesta pull ed è sempre la stessa funzione di commit sul ramo.

git checkout master
git fetch upstream
git checkout feature
git rebase master
=> "Current branch feature is up to date."
git push origin feature
=> "Everything up-to-date"

Non capisco. Com'è possibile quando so che qualcuno si è impegnato e si è unito a upstream/masterdopo aver inviato la mia richiesta pull a origin/feature?

Qualcuno può dirmi quale dovrebbe essere la procedura corretta in questa situazione?

Risposte:


109

Mostra solo un recupero nel repository upstream. Questo in realtà non aggiorna nessuno dei tuoi rami locali. Si aggiorna solo la vostra conoscenza diupstream . Dovresti assicurarti che upstream/mastersia completamente fuso nel tuo master, come con a git pull, prima del rebase su master, o più semplicemente semplicemente rebase su upstream/master.

Cioè:

git checkout master
git pull upstream master
git checkout feature
git rebase master

o

git checkout feature
git rebase upstream/master

Aggiornare:

Dopo aver corretto il featureramo locale , dovrai reinserirlo originper completare l'aggiornamento della richiesta pull. Dato che hai già spinto featureuna volta, non puoi semplicemente di pushnuovo perché un rebase cambia la cronologia e non è lungo un avanzamento veloce. Normalmente, quando un push fallisce con un "non-fast-forward", lo risolveresti facendo un pull, ma un pull combinerà semplicemente le due storie divergenti, che sicuramente non è quello che vuoi. Ciò significherebbe che il tuo vecchio featureramo (pre rebase) sarebbe combinato con quello nuovo (post rebase). Vuoi sovrascrivere origin/feature con lo stato del nuovo featureramo, scaricando qualsiasi record di quello vecchio. Ciò significa che dovrai forzare la spinta ad avvenire, anche se non è un avanzamento veloce, usando git push -f origin feature. Nota:pericoloso e puoi perdere i commit con esso. Usalo solo se sei assolutamente sicuro di sapere cosa stai facendo, come proprio qui, dove vuoi intenzionalmente eliminare i vecchi commit inutili nel featureramo pre-rebase .


1
Ok, vedo, grazie per il chiarimento. Vedo che avrei dovuto tirare invece che recuperare. Ora ho un altro problema, quando git push origin featurericevo un errore di non avanzamento rapido, non riesco a eseguire il push, ecc. Git pull --rebase risolverà questo errore e invierà il push al mio ramo delle funzionalità o ciò causerebbe problemi al manutentore e ad altri?
— fontno

1
Ho aggiornato la mia risposta per coprire la spinta.
— Ryan Stewart,

Nel mio caso, ho aggiunto il repository upstream come telecomando, ma ho dimenticato di recuperarlo. git fetch upstreamscaricato le ultime modifiche, poi alla fine ha git rebase upstream/developfunzionato.
— Alberto Chiusole

9

Ora mi viene chiesto dal manutentore a monte di "ribasare la mia richiesta pull sopra il master"

Nota che da settembre 2016, il manutentore può attivare il rebase da solo.

Vedi " Rebase e unisci richieste pull "

Quando selezioni la nuova opzione "Rebase and merge", i commit dal ramo della richiesta pull vengono ribasati sulla punta del ramo di base, e quindi il ramo di base stesso viene rapidamente inoltrato a questa testa appena ribasata. I rebase impostano automaticamente il committer dei commit ribassati all'utente corrente, mantenendo intatte le informazioni sull'autore. Il ramo della richiesta pull non verrà modificato da questa operazione.

Se non è possibile eseguire un rebase a causa di conflitti, ti faremo sapere in modo che tu possa risolverli manualmente se necessario.

https://cloud.githubusercontent.com/assets/2195/18671961/a03fa9b6-7f35-11e6-8fa0-e16b2fede8ca.gif

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.