397 Stimmen

Wie man einen entfernten Zweig aus einem anderen Repo zieht

Ich habe ein Projekt auf GitHub gehostet, das jemand geforkt hat. Auf ihrem Fork haben sie einen neuen Zweig "foo" erstellt und einige Änderungen vorgenommen. Wie ziehe ich ihre "foo" in einen neuen Zweig auch namens "foo" in meinem Repo?

Ich verstehe, dass sie einen Pull Request an mich richten können, aber ich möchte diesen Prozess selbst initiieren.

Nehmen Sie Folgendes an:

  1. Da sie mein Projekt geforkt haben, haben unsere beiden Repos die gleiche "Geschichte
  2. Obwohl GitHub anzeigt, dass ihr Projekt von meinem geforkt wurde, enthält mein lokales Repository keine Verweise auf das Projekt dieser Person. Muss ich ihr Projekt als Remote hinzufügen?
  3. Ich habe noch keinen Zweig mit dem Namen "foo" - ich weiß nicht, ob ich diesen erst manuell erstellen muss.
  4. Ich möchte auf jeden Fall, dass dies in einen separaten Zweig gezogen wird und nicht in meinen Master.

543voto

ralphtheninja Punkte 116647
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

Dadurch wird eine lokale Zweigstelle eingerichtet foo die Verfolgung des entfernten Zweigs coworker/foo . Wenn Ihr Kollege also Änderungen vorgenommen hat, können Sie diese einfach zurückziehen:

git checkout foo
git pull

Antwort auf Kommentare:

Cool :) Und wenn ich mein eigenes Programm machen möchte Änderungen an diesem Zweig vornehmen möchte, sollte ich einen zweiten lokalen Zweig "bar" erstellen von "foo" erstellen und dort arbeiten, anstatt direkt an meinem "foo" zu arbeiten?

Sie brauchen keinen neuen Zweig zu erstellen, auch wenn ich es empfehle. Sie können genauso gut direkt an foo und lassen Sie Ihren Mitarbeiter an Ihrem Ast ziehen. Aber dieser Zweig existiert bereits und Ihr Zweig foo als vorgelagerter Zweig eingerichtet werden müssen:

git branch --set-upstream foo colin/foo

unter der Annahme, dass colin ist Ihr Repository (ein Fernzugriff auf das Repository Ihrer Kollegen), das auf ähnliche Weise definiert ist:

git remote add colin git://path/to/colins/repo.git

196voto

antak Punkte 17136

Die akzeptierte Antwort funktioniert, aber Sie Sie müssen sie nicht als Fernbedienung hinzufügen denn das wäre umständlich und jedes Mal mühsam.

Ihre Zusagen einholen:

git fetch git://path/to/coworkers/repo.git theirbranch:ournameforbranch

Dadurch wird ein lokaler Zweig mit dem Namen ournameforbranch was genau dasselbe ist wie das, was theirbranch für sie war. Für das Beispiel der Frage würde das letzte Argument lauten foo:foo .

En git://path/to/coworkers/repo.git Teil sollte durch die URL auf ihrer GitHub-Repository-Seite ersetzt werden. Eine SSH-URL würde wie folgt aussehen git@github.com:theirusername/reponame.git und eine HTTPS-Version wie https://github.com/theirusername/reponame.git .

Hinweis :ournameforbranch Teil kann weiter weggelassen werden, wenn es lästig ist, sich einen Namen auszudenken, der nicht mit einem Ihrer eigenen Zweige kollidiert. In diesem Fall wird eine Referenz namens FETCH_HEAD ist verfügbar. Sie können git log FETCH_HEAD um ihre Commits zu sehen und dann Dinge zu tun wie cherry-picked um ihre Zusagen auszuwählen.

Ich schiebe es zurück zu ihnen:

Oftmals möchten Sie reparieren etwas von ihnen und schieben es gleich wieder zurück. Auch das ist möglich:

git fetch git://path/to/coworkers/repo.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git push git://path/to/coworkers/repo.git HEAD:theirbranch

Wenn Sie in losgelöster Zustand Sorgen macht, sollten Sie auf jeden Fall einen Zweig mit :ournameforbranch und ersetzen FETCH_HEAD y HEAD oben mit ournameforbranch .

32voto

Subfuzion Punkte 1622

Im Folgenden finden Sie eine praktische Lösung, die mit GitHub zusammenarbeitet, um den PR-Zweig aus dem Fork eines anderen Benutzers auszuchecken. Sie müssen die Pull-Request-ID kennen (die GitHub zusammen mit dem PR-Titel anzeigt).

Beispiel:

Anfrage ziehen #8
alice will 1 Commit zusammenführen in your_repo:master de her_repo:branch

git checkout -b <branch>
git pull origin pull/8/head
  • Stellvertreter <branch> mit dem Zweignamen aus her_repo:branch
  • Ersetzen Sie den Namen Ihrer Fernbedienung, wenn Sie sie anders genannt haben als origin .
  • Stellvertreter 8 mit der richtigen Pull Request ID.

22voto

Peter Punkte 10417

Wenn die Antwort von antak:

git fetch git@github.com:<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH> 

gibt Ihnen:

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Dann verwenden Sie (gemäß dem Rat von Przemek D)

git fetch https://github.com/<THEIR USERNAME>/<REPO>.git <THEIR BRANCH>:<OUR NAME FOR BRANCH>

7voto

Robert Monfera Punkte 1642

Update: dies scheint nicht mehr zu funktionieren, da Github seine UI geändert hat. Wir hoffen, dass sie es wiederherstellen


GitHub hat eine neue Option im Vergleich zu den vorangegangenen Antworten, einfach die Befehlszeilen aus dem PR kopieren/einfügen:

  1. Scrollen Sie zum Ende der PR, um die Merge o Squash and merge Taste
  2. Klicken Sie auf den Link auf der rechten Seite: view command line instructions
  3. Drücken Sie das Symbol Kopieren rechts neben Schritt 1
  4. Fügen Sie die Befehle in Ihr Terminal ein

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