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:
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
Nein, Sie müssen sie nicht als Fernbedienung hinzufügen. Das wäre umständlich und jedes Mal ein Schmerz.
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.
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
.
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>
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
GitHub hat eine neue Option relativ zu den vorhergehenden Antworten. Kopieren Sie einfach die Befehlszeilen aus dem PR:
Merge
oder Squash and merge
anzuzeigenview command line instructions
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.