web-dev-qa-db-de.com

Wie entferne ich einen Zweig von einem anderen Repo?

Ich habe ein Projekt auf GitHub gehostet, das jemand gegabelt hat. Auf ihrer Gabel haben sie einen neuen Zweig "foo" erstellt und einige Änderungen vorgenommen. Wie ziehe ich ihr "foo" in einen neuen Zweig, der in meinem Repo auch "foo" heißt?

Ich verstehe, dass sie eine Pull-Anfrage an mich stellen könnten, aber ich möchte diesen Prozess selbst initiieren.

Nehmen Sie folgendes an:

  1. Weil sie mein Projekt gegabelt haben, teilen unsere beiden Repos dieselbe "Geschichte".
  2. Obwohl GitHub zeigt, dass ihr Projekt von meinem abgeleitet wurde, hat mein lokales Repository keine Hinweise auf das Projekt dieser Person. Muss ich sie als Fernbedienung hinzufügen?
  3. Ich habe noch keinen Zweig namens "foo" - ich weiß nicht, ob ich das zuerst manuell erstellen muss.
  4. Ich möchte auf jeden Fall, dass dies in einen eigenen Zweig gezogen wird und nicht mein Meister.
211
Colin O'Dell
git remote add coworker git://path/to/coworkers/repo.git
git fetch coworker
git checkout --track coworker/foo

Dadurch wird ein lokaler Zweig foo eingerichtet, der den entfernten Zweig coworker/foo verfolgt. Wenn Ihr Kollege einige Änderungen vorgenommen hat, können Sie diese einfach ziehen:

git checkout foo
git pull

Antwort auf Kommentare:

Cool :) Und wenn ich meine eigenen .__ machen möchte. Änderungen an diesem Zweig sollte ich Erstellen Sie einen zweiten lokalen Zweig "Bar" von "foo" und arbeite dort statt direkt auf meinem "foo"?

Sie müssen keinen neuen Zweig erstellen, obwohl ich ihn empfehle. Sie könnten sich auch direkt auf foo festlegen und Ihren Kollegen Ihren Zweig ziehen lassen. Aber dieser Zweig existiert bereits und Ihr Zweig foo muss als Upstream-Zweig eingerichtet sein:

git branch --set-upstream foo colin/foo

angenommen, colin ist Ihr Repository (ein Remote zu Ihrem Kollegen-Repository), das auf ähnliche Weise definiert ist:

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

Nein, Sie müssen sie nicht als Fernbedienung hinzufügen. Das wäre umständlich und jedes Mal ein Schmerz.

Ihre Commits packen:

git fetch [email protected]:theirusername/reponame.git theirbranch:ournameforbranch

Dadurch wird ein lokaler Zweig mit dem Namen ournameforbranch erstellt, der genau derselbe ist wie für sie theirbranch. Für das Fragenbeispiel wäre das letzte Argument foo:foo.

Hinweis :ournameforbranch part kann weiter weggelassen werden, wenn das Nachdenken über einen Namen, der nicht mit einem Ihrer eigenen Zweige in Konflikt steht, störend ist. In diesem Fall steht eine Referenz namens FETCH_HEAD zur Verfügung. Sie können git log FETCH_HEAD sehen, um ihre Commits zu sehen, und dann Dinge wie cherry-picked tun, um die Commits von Cherry auszuwählen.

Schiebe es zurück zu ihnen:

Oft möchten Sie fix etwas von ihnen und drücken Sie es gleich wieder zurück. Das ist auch möglich:

git fetch [email protected]:theirusername/reponame.git theirbranch
git checkout FETCH_HEAD

# fix fix fix

git Push [email protected]:theirusername/reponame.git HEAD:theirbranch

Wenn Sie in freistehender Zustand arbeiten, machen Sie sich Sorgen, erstellen Sie auf jeden Fall einen Zweig mit :ournameforbranch und ersetzen Sie FETCH_HEAD und HEAD oben durch ournameforbranch.

67
antak

Wenn antak's Antwort: 

git fetch [email protected]:<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 (gemäß den Anweisungen von Przemek D) verwenden 

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

Wenn das gegabelte Repo geschützt ist, sodass Sie es nicht direkt hineinschieben können, und Ihr Ziel darin besteht, Änderungen an seinem Foo vorzunehmen, müssen Sie das Zweigfoo wie folgt in Ihr Repo aufnehmen: 

git remote add protected_repo https://github.com/theirusername/their_repo.git
git fetch protected_repo 
git checkout --no-track protected_repo/foo

Jetzt haben Sie eine lokale Kopie von foo, der kein Upstream zugeordnet ist. Sie können Änderungen vornehmen (oder nicht) und dann Ihr Foo zu Ihrem eigenen Remote-Repo verschieben. 

git Push --set-upstream Origin foo

Jetzt ist foo in deinem Repo auf GitHub und dein lokales foo verfolgt es. Wenn sie weiterhin Änderungen an dem Foo vornehmen, können Sie sie abrufen und mit Ihrem Foo zusammenführen.

git checkout foo 
git fetch protected_repo
git merge protected_repo/foo
1
J Smith

GitHub hat eine neue Option relativ zu den vorhergehenden Antworten. Kopieren Sie einfach die Befehlszeilen aus dem PR:

  1. Blättern Sie zum unteren Rand des PR, um die Schaltfläche Merge oder Squash and merge anzuzeigen
  2. Klicken Sie auf den Link rechts: view command line instructions
  3. Drücken Sie das Kopiersymbol rechts von Schritt 1
  4. Fügen Sie die Befehle in Ihr Terminal ein
0
Robert Monfera

Im Folgenden finden Sie eine praktische Lösung von Nice, die mit GitHub zum Auschecken des PR-Zweigs von einem anderen Benutzer auslöst. Sie müssen die Pull-Request-ID kennen (die GitHub zusammen mit dem PR-Titel anzeigt).

Beispiel:

Ihren unsicheren Code korrigieren # 8
alice möchte 1 Commit aus your_repo:master in her_repo:branch zusammenführen

git checkout -b <branch>
git pull Origin pull/8/head

Ersetzen Sie Ihre Fernbedienung, wenn sie von Origin abweicht.
Ersetzen Sie 8 durch die korrekte Pull-Request-ID. 

0
Subfuzion