Beitrag zum Projekt auf Github, wie man "meine Pull-Anfrage auf Master zurückführt"

98

Ok, ich trage zu einem Projekt auf Github bei. Das Projekt auf Github ist upstream, mein gespaltenes Repo auf Github ist originund mein localRepo auf meinem Computer.

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

dann reiche ich eine Pull-Anfrage ein

git push origin master

Die Pull-Anforderung wird überprüft und es muss eine nicht verwandte Änderung vorgenommen werden. Jemand anderes macht ein Commit und verschmilzt mitupstream/master

Jetzt werde ich vom upstreamBetreuer gebeten , "meine Pull-Anfrage auf Master zu setzen".

Dies ist meine Geschichte (Law and Order-Soundeffekt einfügen) .....

Ich habe keine Änderungen an der Pull-Anforderung vorgenommen und es ist immer noch die gleiche Funktion zum Festschreiben für Verzweigungen.

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"

Ich verstehe nicht. Wie ist dies möglich, wenn ich weiß, dass sich jemand verpflichtet und zusammengeschlossen hat, upstream/masternachdem ich meine Pull-Anfrage an gesendet habe origin/feature?

Kann mir jemand sagen, wie das richtige Verfahren in dieser Situation sein sollte?

fontno
quelle

Antworten:

109

Sie zeigen nur einen Abruf auf dem Upstream-Repo. Dadurch wird keine Ihrer lokalen Niederlassungen aktualisiert. Es aktualisiert nur Ihr Wissen überupstream . Sie müssen sicherstellen, dass upstream/masteres vollständig in Ihr System integriert ist master, z. B. mit a git pull, bevor Sie es erneut verwenden masteroder einfach nur neu erstellen upstream/master.

Dh:

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

oder

git checkout feature
git rebase upstream/master

Aktualisieren:

Nachdem Sie Ihren lokalen featureZweig repariert haben , müssen Sie ihn zurückschieben, originum die Aktualisierung der Pull-Anforderung abzuschließen. Da Sie featurebereits einmal gepusht haben , können Sie nicht einfach pusherneut pushen, da eine Rebase den Verlauf ändert und es sich nicht mehr um einen schnellen Vorlauf handelt. Wenn ein Push mit einem "nicht schnellen Vorlauf" fehlschlägt, lösen Sie ihn normalerweise durch einen Pull, aber ein Pull kombiniert nur die beiden unterschiedlichen Historien, was definitiv nicht das ist, was Sie wollen. Das würde bedeuten, dass Ihr alter featureZweig (vor dem Rebase) mit dem neuen (nach dem Rebase) Zweig kombiniert wird. Sie möchten den Status des neuen Zweigs überschreiben und alle Datensätze des alten Zweigs speichern. Das bedeutet, dass Sie den Push erzwingen möchten, auch wenn es sich nicht um einen schnellen Vorlauf handelt . Hinweis:origin/featurefeaturegit push -f origin featuregefährlich , und Sie können Commits damit verlieren. Verwenden Sie es nur, wenn Sie absolut sicher sind, dass Sie wissen, was Sie tun, wie hier, wo Sie absichtlich die alten, nutzlosen Commits im Pre-Rebase- featureZweig ablegen möchten .

Ryan Stewart
quelle
1
Ok, ich verstehe, danke für die Klarstellung. Ich sehe, dass ich hätte ziehen sollen, anstatt zu holen. Jetzt habe ich ein anderes Problem, wenn ich git push origin featureeinen Fehler beim nicht schnellen Vorlauf erhalte, nicht pushen kann usw. Würde git pull --rebase diesen Fehler beheben und in meinen Feature-Zweig pushen oder würde dies Probleme für den Betreuer und andere verursachen?
Fontno
1
Meine Antwort wurde aktualisiert, um den Push abzudecken.
Ryan Stewart
In meinem Fall habe ich das Upstream-Repo als Fernbedienung hinzugefügt, aber vergessen, es abzurufen. git fetch upstreamlud die neuesten Änderungen herunter und git rebase upstream/developfunktionierte schließlich .
Alberto Chiusole
9

Jetzt werde ich vom Upstream-Betreuer gebeten, "meine Pull-Anfrage auf Master zu setzen".

Beachten Sie, dass der Betreuer seit September 2016 die Rebase selbst auslösen kann.

Siehe " Pull-Anforderungen neu erstellen und zusammenführen ".

Wenn Sie die neue Option "Neu erstellen und zusammenführen" auswählen, werden die Festschreibungen aus dem Zweig der Pull-Anforderung an die Spitze des Basiszweigs weitergeleitet, und der Basiszweig selbst wird schnell an diesen neu basierten Kopf weitergeleitet. Rebases legt automatisch den Committer der neu basierten Commits für den aktuellen Benutzer fest, während die Autoreninformationen intakt bleiben. Der Zweig der Pull-Anforderung wird durch diesen Vorgang nicht geändert.

Wenn eine Rebase aufgrund von Konflikten nicht durchgeführt werden kann, werden wir Sie darüber informieren, damit Sie sie bei Bedarf manuell lösen können.

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

VonC
quelle