Ich habe ein Projekt auf Github gegabelt und nehme erfolgreich Änderungen an meinem lokalen Master vor und dränge auf Github zum Ursprung. Ich möchte eine Pull-Anfrage senden, aber nur das letzte Commit einschließen. Die Pull-Request-Benutzeroberfläche auf github.com zeigt die letzten 9 Commits an, und ich weiß nicht, wie ich das herausfiltern soll.
Ich habe versucht zu verstehen, ob ich einen neuen lokalen Zweig erstellen, das überprüfen und irgendwie zurücksetzen oder auf Upstream zurücksetzen soll. Wenden Sie dann mein letztes Commit von meinem Master per ID auf den neuen lokalen Zweig an und verwenden Sie dieses für die Pull-Anforderung?
Ich versuche, die Konzepte richtig zu machen und die richtigen Befehlszeilen zu finden, um das zu tun, was ich brauche.
quelle
Antworten:
Sie müssen im Grunde genommen einen neuen Zweig erstellen und die Commits auswählen, die Sie hinzufügen möchten.
Anschließend sehen Sie einen
<new-branch-name>
Zweig auf Github, wechseln zu diesem und können die Pull-Anfrage mit den gewünschten Änderungen senden.quelle
git remote add upstream <git repository>
undgit remote update
bevor ich git checkout -b upstream upstream / master ausführen kann.Erstellen Sie einen neuen Zweig ab dem letzten Commit, der sich ebenfalls im Ursprungs-Repository befindet:
Verwenden Sie dann
git cherry-pick
, um das einzelne Commit abzurufen, für das Sie die Pull-Anforderung wünschen. Wenn der Zweig mit diesem Commit aufgerufen wirdfeature
und das gewünschte Commit das letzte Commit in diesem Zweig ist, ist dies der FallVorausgesetzt, dieser Patch gilt ohne Konflikte, haben Sie jetzt einen Zweig, für den Sie Ihre Pull-Anfrage ausführen können.
In einem zweiten Schritt müssen Sie nun entscheiden, was mit Ihrer
feature
Niederlassung geschehen soll. Wenn Sie Ihre Änderungen noch nicht in diesem Zweig veröffentlicht haben, ist es wahrscheinlich das beste Verfahren, diesen Zweig bei einem neuen Zweig neu zu gründen (und das letzte Commit zu entfernen, wenn dies nicht automatisch von erfolgtgit rebase
).quelle
feature
bereits festgeschrieben istorigin/master
, passiert während nichtscherry-pick
. Der neue Zweig sollte vonupstream/master
(dh Kevin Hakansons Antwort) seinIch kam in eine Situation, in der ich eine Gabel gegabelt hatte und eine Pull-Anfrage an das ursprüngliche Projekt zurücksenden wollte.
Ich hatte:
Um dies zu tun, ich:
Die Git-Befehle waren ungefähr so:
Dann habe ich meine Feature-Anfrage als Zweig für meine Pull-Anfrage zum ursprünglichen Projekt ausgewählt.
quelle
Das hat bei mir fast geklappt:
Der einzige Unterschied war folgender:
Ich musste diese letzte Zeile ändern, damit Git Push den Upstream-Zweig in meinem GitHub-Repo erstellt, damit ich daraus PR machen konnte.
quelle
Ich hatte bereits das Commit gemacht, das ich als Pull-Anfrage zurück in den aktuellen Zweig isolieren wollte.
Also habe ich eine neue Filiale ausgecheckt
Und hier unterscheidet sich meine Lösung von der von @ Kevin Kevin Hakanson , da ich diesen Zweig an die Stelle in der Geschichte zurücksetzen muss, von der ich mich unterscheiden möchte
Wählen Sie das Commit aus, aus dem ich eine isolierte Pull-Anforderung erstellen möchte
Schieben Sie es schließlich auf die Fernbedienung
Und ziehen Sie Anfrage dat shi.
quelle
Die Lösung zum Erstellen eines neuen (temporären) Zweigs, zum Kirschpflücken und zum Erstellen der Pull-Anforderung für diesen Zweig hat mich nicht zufriedengestellt. Ich wollte mein Repository nicht ändern, um eine Reihe von Commits verfügbar zu machen, daher habe ich mir die folgende Alternative ausgedacht:
Erstellen Sie zuerst Patch-Dateien für alle Commits von Interesse:
Wenn das Commit of Interest zufällig das letzte ist, können Sie es
HEAD
stattdessen verwenden<sha>
.Jetzt können Sie die Patches an den Betreuer des Quell-Repositorys senden, der sie anwenden kann:
Schließlich sollte dies so aussehen, als ob ein temporärer Zweig durch eine Pull-Anforderung zusammengeführt wurde, ohne jedoch diesen zusätzlichen Zweig im Fork-Repository zu haben.
quelle
Basierend auf der Antwort von @ kevin-hakanson habe ich dieses kleine Bash-Skript geschrieben, um diesen Prozess zu vereinfachen. Es fügt das Upstream-Repo hinzu, falls es noch nicht vorhanden ist (und fordert Sie zur Eingabe der URL auf), und fordert Sie dann auf, sowohl den Namen des neu zu erstellenden Zweigs als auch das Tag / die SHA des Commits für Cherry Pick auf diesem Zweig anzugeben. Es überprüft, in welchem Zweig oder Commit Sie sich gerade befinden, und speichert dann alle Änderungen, damit Sie den neuen Zweig auschecken können. Die Zusammenführungsstrategie behält die Änderungen aus dem von Kirschen ausgewählten Commit bei. Nachdem Sie den neuen Zweig auf
origin
(vermutlich der Name Ihres Remote-Repos) verschoben haben, wird der Zweig oder das Commit, auf dem Sie zuvor waren, erneut ausgecheckt und Ihre vorherigen Änderungen wurden aus dem Stash entfernt.(Dies hat bei mir in ein paar einfachen Tests funktioniert, aber ich bin kein Bash-Programmierer oder Git-Experte. Lassen Sie mich wissen, wenn ich Fälle verpasst habe, die besser automatisiert werden könnten!)
quelle