Wie kann ich eine Pull-Anfrage von einem geklonten Repo einreichen?


82

Wie kann ich eine Pull-Anfrage von einem vorhandenen lokal geklonten Repo senden?

Oft möchte ich mir den Quellcode einiger Bibliotheken von github ansehen, also klone ich ihn. Später entdecke ich ein Problem mit dem Code und stelle ihn häufig nebenbei auf eine Mailingliste. Der Autor der Bibliothek sagt "Schöner Fund, können Sie eine Pull-Anfrage senden?".

Und die Antwort lautet "nicht so einfach". Ich habe das Repo noch nicht gegabelt, ich habe es geklont. Und es scheint keine Möglichkeit zu geben, eine Pull-Anfrage von einem geklonten Repo einzureichen?

Wenn diese Grenze zutrifft, scheint es die vernünftige Reaktion zu sein, alles und jeden zu teilen, was Sie jemals betrachten, nur damit Sie, wenn Sie jemals einen Beitrag leisten möchten, dies tun können. Und das füllt Ihr Github-Konto mit vielen inaktiven Gabeln.

Scheint nicht viel über dieses Problem zu reden - bin ich die einzige Person, die von diesem Problem betroffen ist?


4
Seitdem ist diese sehr ähnliche Frage aufgefallen: stackoverflow.com/questions/4209208/…
Ben Hutchison

Antworten:


55

Fork das Repo auf GitHub und füge dann dein Fork Repo als Remote zu deiner lokal geklonten Kopie hinzu:

git remote add myfork https://github.com/<myGitHubAccountName>/<repoName>.git

Dann können Sie an Ihre Gabel drücken:

git push myfork master

Wenn Sie mehr als nur diese eine Pull-Anforderung ausführen, können Sie die originFernbedienung entfernen und Ihre Gabel als Ursprung benennen:

git remote rm origin
git remote add origin https://github.com/<myGitHubAccountName>/<repoName>.git

Das mache ich normalerweise. Manchmal füge ich den ursprünglichen Ursprung hinzu, upstreamdamit ich immer noch einen Verweis darauf habe.


5
Wie machst du das ohne Gabelung?
Aaron Hall

3
Wenn Sie Push-Zugriff auf ein Repo haben, können Sie eine Pull-Anforderung zwischen Zweigen dieses Repos öffnen. Sie müssen Ihre lokale Filiale auf einen neuen Filialnamen setzen origin- so etwas wie git push origin HEAD:my-feature. Anschließend können Sie über die Web-Benutzeroberfläche eine Pull-Anforderung von my-featurebis öffnen master.
Bobthecow

11
@Torek - Noch ein vermasselter Workflow. Ist es wirklich so schwierig, eine einfache Aktion auszuführen? Ich dachte, dies sei eines der Hauptziele von git - die Zusammenarbeit und das Teilen von Patches in einem dezentralen Modell zu vereinfachen. Es ist kein Raketenwissenschaftler erforderlich, um daraus zu schließen, dass das Ziel einfach und leicht zu erreichen sein sollte, da es ein grundlegender Arbeitsablauf ist. Diese Leute müssen einen UX-Experten einstellen, da ihnen allen der gesunde Menschenverstand fehlt, um dies selbst herauszufinden.
JWW

10

Wenn Sie mit der Installation einer weiteren Binärdatei in Ihrem Pfad einverstanden sind, hat github ein nettes kleines Tool namens veröffentlicht hub.

Wenn Sie das Repo eines anderen geklont haben:

$ hub fork  # This creates a fork and adds your repo as a remote

$ git push YOUR_USER feature  # push the changes to your new remote

$ hub pull-request  # will open your browser

Vielen Dank für das Teilen über Hub und ich liebe es :) Ich war genau in dieser Situation und Hub macht es so bequem für mich.
Wahib Ul Haq

Es ist wichtig zu beachten, dass "Hub Fork" immer noch das gegabelte Repo in Ihrem Konto auf GitHub erstellt.
Granger

-1

Ich klone immer auch anstelle der Gabel und die folgenden Schritte funktionieren für mich:

  1. Erstellen Sie einen neuen Zweig in Ihrem geklonten Repo und nehmen Sie die neue Änderung vor.
  2. Übertragen Sie die Änderung wie folgt in Ihre Filiale:

    git push origin insert_your_working_branch_name

  3. Jetzt sollten Sie in der Lage sein, Ihren Arbeitszweig in einer Pull-Anfrage vom Github-Master zu finden.


3
Ich verstehe nicht, wie Schritt 2 oben funktionieren könnte, wenn Sie jemandes Repo geklont haben, für das Sie keine Push-Rechte haben?
Ben Hutchison
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.