554 Stimmen

Wie kann ich ein GitHub-Pull-Request mit Git überprüfen?

Ich möchte eine zuvor erstellte Pull-Anfrage über die GitHub-Webplattform überprüfen. Ich habe gesucht und verschiedene Orte gefunden, an denen ein refs/pull oder refs/pull/pr existiert.

Aber wenn ich fetch = +refs/pull/*/head:refs/remotes/origin/pr/* zur Git-Konfigurationsdatei hinzufüge und dann ein git fetch ausführe

Was mache ich falsch? Sollte GitHub automatisch die pull/xyz-Dinge erstellen oder muss ich etwas konfigurieren?

868voto

timbo Punkte 11219

Um einen Remote-PR in Ihrem lokalen Repository abzurufen,

git fetch origin pull/$ID/head:$BRANCHNAME

wo $ID die Pull-Request-ID und $BRANCHNAME der Name des neuen Branches ist, den Sie erstellen möchten. Sobald Sie den Branch erstellt haben, einfach

git checkout $BRANCHNAME

Zum Beispiel, stellen Sie sich vor, dass Sie Pull-Request #2 vom Origin-Main-Branch abrufen möchten:

git fetch origin pull/2/head:MASTER

Sehen Sie sich die offizielle GitHub-Dokumentation für mehr Informationen an.

211voto

Zombo Punkte 1

Dies wird abgerufen, ohne dass Sie einen Zweig benennen müssen:

git pull origin pull/939/head

Wie bekomme ich einen bestimmten Pull-Request auf meinen Computer?

120voto

Andrew Ymaz Punkte 2093

Ich ziehe es vor, ohne Erstellung eines lokalen Branches zu holen und auszuchecken und mich in einem HEAD detached Zustand zu befinden. Dadurch kann ich schnell das Pull-Request überprüfen, ohne meine lokale Maschine mit unnötigen lokalen Branches zu verunreinigen.

git fetch upstream pull/ID/head && git checkout FETCH_HEAD

wo ID eine Pull-Request ID ist und upstream wo der Original-Pull-Request erstellt wurde (zum Beispiel könnte es origin sein).

69voto

VonC Punkte 1117238

Das Gist beschreibt, was passiert, wenn du ein git fetch durchführst:

Offensichtlich änderst du die Github-URL, um sie an die URL deines Projekts anzupassen. Es sieht dann so aus:

[remote "origin"]
    url = git@github.com:joyent/node.git
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*
    fetch = +refs/heads/*:refs/remotes/origin/*

Beachte die Reihenfolge der fetch Refspecs, wie in den Kommentaren von crashneb in seiner eigenen Antwort vorgeschlagen.

Falls nicht, das heißt, wenn du nicht die richtige Reihenfolge hast aufgrund eines:

git config --add remote.origin.fetch "+refs/pull/*/head:refs/remotes/origin/pr/*" ... 

und dann vertraust darauf, dass der PR-Checkout automatisch den neuen lokalen Branch mit etwas wie git switch pr/1 einrichtet - dann könntest du Probleme bekommen, wenn der PR aktualisiert wird und du ihn einfach wieder mit git pull holen willst.
Der branch.pr/1.merge Konfigurationswert wird nicht korrekt sein.


Hole jetzt alle Pull Requests:

$ git fetch origin
From github.com:joyent/node
 * [new ref]         refs/pull/1000/head -> origin/pr/1000
 * [new ref]         refs/pull/1002/head -> origin/pr/1002
 * [new ref]         refs/pull/1004/head -> origin/pr/1004
 * [new ref]         refs/pull/1009/head -> origin/pr/1009
...

Um einen bestimmten Pull Request auszuchecken:

$ git checkout pr/999
Branch pr/999 set up to track remote branch pr/999 from origin.
Switched to a new branch 'pr/999'

Es gibt verschiedene Skripte in Issues 259, um diese Aufgabe zu automatisieren.
Das git-extras Projekt schlägt den Befehl git-pr (implementiert in PR 262) vor

git-pr(1) -- Checkt einen Pull Request lokal aus

SYNOPSIS

git-pr  []
git-pr clean

BESCHREIBUNG

Erstellt einen lokalen Branch basierend auf einer GitHub-Pull-Request-Nummer und wechselt danach zu diesem Branch.

Der Name des Remotes, von dem zu fetchen ist. Standardmäßig origin.

BEISPIELE

Dies holt den Pull Request 226 von origin:

$ git pr 226

remote: Counting objects: 12, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 12 (delta 3), reused 9 (delta 3)
Unpacking objects: 100% (12/12), done.
From https://github.com/visionmedia/git-extras
  * [new ref] refs/pull/226/head -> pr/226
Switched to branch 'pr/226'

53voto

bagerard Punkte 3832

Das Github CLI gh ermöglicht es Ihnen, den Branch eines Pull Requests lokal anhand seiner ID auszuchecken (doc)

gh pr checkout 2267

Dies ermöglicht es auch, Änderungen mit einem einfachen git push zurück zum Fork zu übertragen, falls der PR-Ersteller Ihnen Bearbeitungsrechte für ihren Fork gegeben hat.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X