Ein Projekt auf GitHub, von dem ich eine Gabel habe, hat neue Pull-Anforderungen, die ich in meine Gabel ziehen möchte, die der Autor noch nicht eingezogen hat.
Gibt es eine einfache Möglichkeit, eine Pull-Anforderung von anderen Gabeln auf meine Gabel anzuwenden? Gibt es hier noch etwas, das mir fehlt?
git
github
pull-request
Lauch
quelle
quelle
Antworten:
Sie können es ganz einfach manuell machen:
Fügen Sie die andere Gabel als Fernbedienung Ihres Repos hinzu:
Holen Sie sich die Commits seines Repos
Sie haben dann zwei Möglichkeiten, um die Pull-Anforderung anzuwenden (wenn Sie nicht Auswahl 1 auswählen möchten).
Wenn Sie nicht auch die eventuellen Commits anwenden möchten, die zwischen dem Ursprung und der Pull-Anforderung hinzugefügt wurden, können Sie den Zweig, auf dem die Pull-Anforderung erstellt wurde, einfach neu gründen
Wenn Sie nur die Commits in der Pull-Anforderung möchten, identifizieren Sie deren SHA1 und tun Sie dies
quelle
git pull URL branchname
Update: Über Webseite
Sie können dies auch über die Github-Webseite tun.
Ich gehe davon aus, dass Sie bereits eine Fork (
MyFork
) des Common Repo (BaseRepo
) haben sollten, die die ausstehende Pull-Anforderung von einer Fork (OtherFork
) enthält, an der Sie interessiert sind.OtherFork
), die die Pull-Anforderung initiiert hat, die Sie in Ihre Gabel (MyFork
) erhalten möchten.OtherFork
OtherFork
Zweig auszuwählen . Wählen Sie auf der linken Seite als Basisgabel Ihre Gabel (MyFork
) ( WICHTIG ).View pull request
auf ändernCreate pull request
. Klicke hier.Jetzt sollten Sie eine ausstehende Pull-Anfrage in Ihrer Fork (
MyFork
) haben, die Sie einfach akzeptieren können.quelle
OtherFork
aus der Dropdown-Liste "Vergleichen" auf der rechten Seite den Zweig ausgewählt, der der Pull-Anforderung von entspricht. Ich habe dann die linke Seite als Basisgabel ausgewählt, wie oben beschrieben, um die Pull-Anforderung zu erstellen.Wie Tekkub bereits sagte, können Sie den Zweig einfach direkt hineinziehen. Die meiste Zeit mit GitHub ist der Zweig einfach "Master" auf dem Fork des anfragenden Benutzers des Projekts.
Beispiel:
git pull https://github.com/USER/PROJECT/ BRANCH
Und als praktisches Beispiel:
Angenommen, Sie haben ein Github-Projekt namens Safaribooks gegabelt, und im ursprünglichen Projekt gibt es die folgende Pull-Anforderung, die Sie in Ihre Gabel einfügen möchten:
Führen Sie dann im geklonten Projektordner Ihrer Gabel Folgendes aus:
quelle
git pull https://github.com/{upstream/project} refs/pull/{id}/head
stattdessen zu verwenden .Pull-Anforderungen für das Projekt können von vielen verschiedenen Autoren (Gabeln) stammen, und Sie möchten wahrscheinlich nicht für jede Gabel eine separate Fernbedienung. Außerdem möchten Sie keine Annahmen über den Zweig treffen, den der Autor beim Senden der Pull-Anforderung verwendet hat, oder darüber, was sich sonst noch im Hauptzweig des Autors befindet. Es ist daher besser, auf die Pull-Anforderung zu verweisen, wie sie im Upstream-Repository angezeigt wird, als wie sie in den anderen Gabeln angezeigt wird.
Schritt 1:
Sie haben diesen Schritt wahrscheinlich bereits ausgeführt, aber wenn nicht, möchten Sie eine für das Upstream-Projekt definierte Fernbedienung. Die URL ist die Klon-URL des Projekts, das Sie gegabelt haben. Weitere Informationen finden Sie unter Konfigurieren einer Fernbedienung für eine Gabel und Synchronisieren einer Gabel .
upstream
ist der Name, den Sie der Fernbedienung geben, und obwohl es alles sein kann,upstream
ist es der herkömmliche Name.Schritt 2:
... wo
{id}
ist die Pull-Request-Nummer?upstream
ist der Name der Fernbedienung, von der abgerufen werden soll, dh nur "Upstream", wenn Sie Schritt 1 genau befolgt haben. Es kann sich auch um eine URL handeln. In diesem Fall können Sie Schritt 1 überspringen.Schritt 3:
Geben Sie eine Commit-Nachricht für das Merge-Commit ein. Sie können die Standardeinstellung beibehalten, obwohl ich empfehle, eine schöne einzeilige Zusammenfassung mit der Pull-Anforderungsnummer, dem behobenen Problem und einer kurzen Beschreibung anzugeben:
quelle
git pull upstream refs/pull/{id}/head
, um die Commits in Ihr lokales Repo zu bekommen, und sie dann alsFETCH_HEAD
(z. B. umgit log ..FETCH_HEAD
zu sehen, was dann drin istgit merge FETCH_HEAD
)Einige detailliertere Informationen, die für mich funktioniert haben.
Meine .git / config-Datei für das gegabelte Repo sieht folgendermaßen aus:
Führen Sie dann "git fetch source" aus, in dem alle Pull-Anforderungen aus dem gegabelten Repo aufgelistet sind.
Und um dann in einer bestimmten Pull-Anfrage zusammenzuführen, führen Sie "git merge master origin / pr / 67" aus.
quelle
refs/pull/
Namespace .smartgit.branch.otherRefs=notes;pull
smartgit.properties gemäß syntevo.com/doc/display/SG/System+Properties hinzufügen. Sie können sie auch von dort aus zusammenführen .Was ich tun würde, ist das Folgende;
Ich habe jetzt die Änderungen in einem Testzweig mit dem Namen zusammengeführt
test_fork
. Damit Änderungen meinen Baum nicht verschmutzen.Optional können Sie Cherry-Pick wie oben beschrieben verwenden, um ein bestimmtes Commit auszuwählen, wenn dies vorzuziehen ist.
Gute Reise :)
quelle
Ich benutze dafür ein handliches Dandy-Skript. Ich führe das Skript aus, indem ich Folgendes eingebe:
und es erhält alle Pull-Anforderungen von der Upstream-Gabel.
Um das Skript zu erstellen, erstellen Sie eine Datei
~/bin/git-prfetch
.Die Datei sollte Folgendes enthalten:
Stellen Sie sicher, dass Ihr Pfad das Skript enthält, indem Sie Folgendes festlegen:
Sie können diese Datei hinzufügen
~/.bashrc
, um die Änderung dauerhaft zu machen.Stellen Sie nun sicher, dass Sie die Gabelung hinzufügen, von der Sie die Pull-Anforderungen erhalten möchten:
Und dann
quelle